2016-08-18 2 views
0

Я пытаюсь найти контакт из netsuite. что я в основном делаю, создавая критерии поиска с параметром электронной почты в качестве параметра и пытаясь получить результат, а затем сопоставить его объекту с трансформатором xml. Но я получаю следующее сообщение об ошибке, как:Ошибка при получении результата поиска netsuite

не могли бы назвать java.util.concurrent.CopyOnWriteArrayList.writeObject(): Не удается мобилизовывать экземпляр XStream в действии

мул поток Я использую следующим образом:

<flow name="contact_searchFlow"> 
    <http:listener config-ref="HTTP_Request_Configuration" path="/basicContactSearch" doc:name="HTTP"/> 
    <logger message="Test1" level="INFO" doc:name="Logger"/> 
<component class="netsuitews.ContactBasicSearchComponent" doc:name="Search Contact Basic criteria"/> 
    <logger message="Test 2" level="INFO" doc:name="Logger"/> 
<netsuite:search config-ref="NetSuite__Request_Level_Authentication" searchRecord="CONTACT_BASIC" fetchSize="5" doc:name="Contact Basic Search"/> 
    <logger message="Test3" level="INFO" doc:name="Logger"/> 
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/> 
    <logger message="Test4" level="INFO" doc:name="Logger"/>  

компонент поиска я использую следующим образом:

public class ContactBasicSearchComponent implements Callable { 

public Object onCall(MuleEventContext eventContext) throws Exception { 
    ContactSearchBasic searchCriteria = new ContactSearchBasic();  

    SearchStringField nameFilter = new SearchStringField(); 
    nameFilter.setOperator(SearchStringFieldOperator.IS); 
    nameFilter.setSearchValue("[email protected]"); 
    searchCriteria.setEmail(nameFilter); 

    return searchCriteria; 
} 
@Override 
public Object call() throws Exception { 
    // TODO Auto-generated method stub 
    return null; 
} 

}

Я использую NetSuite Connector (Mule 3.5+) версия 7.1.0.201603151241 и работает в мул 3.8.0 EE версии.

Вот трассировка стека, которую я получил из журналов мула.

2016-08-18 20:41:26,181 [netsuitews].HTTP_Request_Configuration.worker.01] INFO org.mule.api.processor.LoggerMessageProcessor - Test1 

2016-08-18 20:41:26,194 [[netsuitews].HTTP_Request_Configuration.worker.01] INFO org.mule.api.processor.LoggerMessageProcessor - Test 2 

2016-08-18 20:41:37,668 [[netsuitews].HTTP_Request_Configuration.worker.01] INFO org.mule.api.processor.LoggerMessageProcessor - Test3 

2016-08-18 20:41:43,761 [[netsuitews].HTTP_Request_Configuration.worker.01] ERROR org.mule.exception.DefaultMessagingExceptionStrategy - 

******************************************************************************** 
Message    : Could not call java.util.concurrent.CopyOnWriteArrayList.writeObject() : Cannot marshal the XStream instance in action 
------------------------------- 
message    : Could not call java.util.concurrent.CopyOnWriteArrayList.writeObject() 
cause-exception  : com.thoughtworks.xstream.converters.ConversionException 
cause-message  : Cannot marshal the XStream instance in action 

(com.thoughtworks.xstream.converters.ConversionException). 
Payload    : [email protected] 
Element XML   : <mulexml:object-to-xml-transformer doc:name="Object to XML"></mulexml:object-to-xml-transformer> 
Payload Type   : org.mule.streaming.ConsumerIterator 

Element    : /contact_searchFlow/processors/5 @ netsuitews:customer_crud.xml:61 (Object to XML) 

Root Exception stack trace: 
com.thoughtworks.xstream.converters.ConversionException: Cannot marshal the XStream instance in action 
at com.thoughtworks.xstream.core.util.SelfStreamingInstanceChecker.marshal(SelfStreamingInstanceChecker.java:59) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:250) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:226) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.<init>(AbstractReflectionConverter.java:189) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:135) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:83) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:250) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:226) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.<init>(AbstractReflectionConverter.java:189) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:135) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:83) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:88) 
at  
. 
. 
. 

Не могли бы вы помочь в этом!

ответ

1

Это исключение преобразования происходит потому, что Поиск операция NetSuite является процессором, который реализует разбиения на страницах. Следовательно, получаемая полезная нагрузка имеет тип ConsumerIterator. Объект Объект XML трансформатор не может напрямую преобразовать этот итератор в XML. Сначала вам нужно извлечь его содержимое, чтобы манипулировать им. Один из вариантов - преобразовать данные в список, а затем применить XML-трансформатор. Например:

#[org.apache.commons.collections.IteratorUtils.toList(payload)] 

Тогда ваш поток будет выглядеть следующим образом:

<flow> 
    ... 
    <netsuite:search config-ref="NetSuite__Request_Level_Authentication" searchRecord="CONTACT_BASIC" fetchSize="5" doc:name="NetSuite"/> 
    <set-payload value="#[org.apache.commons.collections.IteratorUtils.toList(payload)]" doc:name="Set Payload"/> 
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/> 
</flow> 

Кроме того, я предлагаю вам использовать DataWeave построить входные данные для NetSuite, вместо того, чтобы использовать компонент Java, чтобы установить критерии поиска ,

<dw:transform-message doc:name="Transform Message"> 
    <dw:set-payload><![CDATA[%dw 1.0 
    %output application/java 
    --- 
    { 
     email: { 
      operator: "IS", 
      searchValue: "[email protected]" 
     } 
    } as :object { 
     class : "com.netsuite.webservices.platform.common.ContactSearchBasic" 
    } 
    ]]></dw:set-payload> 
</dw:transform-message> 

Окончательный поток будет выглядеть примерно так:

enter image description here

+0

Спасибо. Вы правы @CountD. Отлично работает. – Raj

Смежные вопросы