Hi Willem,
I tried to re-generate the SEI but it does not change anything. Here is
what it looks like :

@WebService(targetNamespace = "http://wgcorp.net/DeviceRegistrySimple";,
name = "DeviceRegistryPortType")
@XmlSeeAlso({ObjectFactory.class})
public interface DeviceRegistryPortType {

    @RequestWrapper(localName = "GetDevices", targetNamespace = "
http://wgcorp.net/DeviceRegistrySimple";, className =
"net.wgcorp.deviceregistrysimple.GetDevices")
    @WebMethod(operationName = "GetDevices", action = "urn:#GetDevices")
    @ResponseWrapper(localName = "GetDevicesResponse", targetNamespace = "
http://wgcorp.net/DeviceRegistrySimple";, className =
"net.wgcorp.deviceregistrysimple.GetDevicesResponse")
    public void getDevices(
        @WebParam(name = "arg1", targetNamespace = "")
        java.lang.String arg1,
        @WebParam(mode = WebParam.Mode.OUT, name = "resp1", targetNamespace
= "")
        javax.xml.ws.Holder<java.lang.String> resp1,
        @WebParam(mode = WebParam.Mode.OUT, name = "resp2", targetNamespace
= "")
        javax.xml.ws.Holder<java.lang.String> resp2
    );
}

On Tue, Dec 20, 2011 at 8:43 AM, Willem Jiang <[email protected]>wrote:

> Hi,
>
> It looks like you just change the WSDL, and didn't use the wsdl2java to
> generate the new SEI.
> Can you updated the generated SEI and try again ?
>
>
> On Tue Dec 20 01:59:49 2011, will mad wrote:
>
>> Hi,
>>
>> I have written a simple route that regularly send a soap message using
>> cxf :
>>
>> from("timer:test?period=20000&**delay=5000").to("bean:**
>> systemManagerBean?method=**getDevicesSimple");
>>
>> Here is the operation in my systemManagerBean calling the cxf endpoint :
>> public void getDevicesSimple() {
>> Exchange senderExchange = new DefaultExchange(context,
>> ExchangePattern.InOut);
>> List<String>  params = new ArrayList<String>();
>> params.add("a");
>> senderExchange.getIn().**setBody(params);
>>  senderExchange.getIn().**setHeader(CxfConstants.**OPERATION_NAME,
>> "GetDevices");
>> Exchange responseExchange =
>> producerTemplate.send("cxf:**bean:**cxfDeviceRegistryWsEndpoint?**
>> synchronous=true",
>> senderExchange);
>> MessageContentsList messageContentsList =
>> (MessageContentsList)**responseExchange.getOut().**getBody();
>> logger.debug("resp1 : " + messageContentsList.get(2));
>> logger.debug("resp2 : " + messageContentsList.get(3));
>> }
>>
>> I have a weird issue occurring when my wsdl specifies that there are 2
>> elements in the response. If I specify that there is only one element in
>> the response, everything works perfectly. But if I add a second element in
>> the response, I encounter the following exception :
>>
>> 2011-12-19 17:50:27,281 | WARN  | org.apache.cxf.common.logging.**
>> LogUtils
>>           | Interceptor for {
>> http://wgcorp.net/**DeviceRegistrySimple}**DeviceRegistryPortTypeService#
>> **{http://wgcorp.net/**DeviceRegistrySimple}**GetDeviceshas<http://wgcorp.net/DeviceRegistrySimple%7DDeviceRegistryPortTypeService#%7Bhttp://wgcorp.net/DeviceRegistrySimple%7DGetDeviceshas>
>> thrown exception, unwinding now
>> java.lang.**IndexOutOfBoundsException: Index: 1, Size: 1
>>         at java.util.ArrayList.**RangeCheck(ArrayList.java:547)
>>         at java.util.ArrayList.get(**ArrayList.java:322)
>>         at
>> org.apache.cxf.jaxws.**interceptors.**HolderInInterceptor.**
>> handleMessage(**HolderInInterceptor.java:63)
>>         at
>> org.apache.cxf.phase.**PhaseInterceptorChain.**doIntercept(**
>> PhaseInterceptorChain.java:**243)
>>         at org.apache.cxf.endpoint.**ClientImpl.onMessage(**
>> ClientImpl.java:733)
>>         at
>> org.apache.cxf.transport.http.**HTTPConduit$**WrappedOutputStream.**
>> handleResponseInternal(**HTTPConduit.java:2286)
>>         at
>> org.apache.cxf.transport.http.**HTTPConduit$**WrappedOutputStream.**
>> handleResponse(HTTPConduit.**java:2156)
>>         at
>> org.apache.cxf.transport.http.**HTTPConduit$**WrappedOutputStream.close(*
>> *HTTPConduit.java:2010)
>>         at
>> org.apache.cxf.transport.**AbstractConduit.close(**
>> AbstractConduit.java:66)
>>         at
>> org.apache.cxf.transport.http.**HTTPConduit.close(HTTPConduit.**java:661)
>>         at
>> org.apache.cxf.interceptor.**MessageSenderInterceptor$**
>> MessageSenderEndingInterceptor**.handleMessage(**
>> MessageSenderInterceptor.java:**62)
>>         at
>> org.apache.cxf.phase.**PhaseInterceptorChain.**doIntercept(**
>> PhaseInterceptorChain.java:**243)
>>         at org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**
>> java:516)
>>         at
>> org.apache.camel.component.**cxf.CxfProducer.process(**
>> CxfProducer.java:129)
>>         at
>> org.apache.camel.impl.**SynchronousDelegateProducer.**process(**
>> SynchronousDelegateProducer.**java:61)
>>         at
>> org.apache.camel.impl.**converter.**AsyncProcessorTypeConverter$**
>> ProcessorToAsyncProcessorBridg**e.process(**AsyncProcessorTypeConverter.*
>> *java:50)
>>         at
>> org.apache.camel.processor.**UnitOfWorkProcessor.process(**
>> UnitOfWorkProcessor.java:99)
>>         at
>> org.apache.camel.util.**AsyncProcessorHelper.process(**
>> AsyncProcessorHelper.java:91)
>>         at
>> org.apache.camel.processor.**DelegateAsyncProcessor.**process(**
>> DelegateAsyncProcessor.java:**85)
>>         at
>> org.apache.camel.processor.**UnitOfWorkProducer.process(**
>> UnitOfWorkProducer.java:63)
>>         at
>> org.apache.camel.impl.**ProducerCache$1.doInProducer(**
>> ProducerCache.java:333)
>>         at
>> org.apache.camel.impl.**ProducerCache$1.doInProducer(**
>> ProducerCache.java:303)
>>         at
>> org.apache.camel.impl.**ProducerCache.doInProducer(**
>> ProducerCache.java:208)
>>         at
>> org.apache.camel.impl.**ProducerCache.sendExchange(**
>> ProducerCache.java:303)
>>         at org.apache.camel.impl.**ProducerCache.send(**
>> ProducerCache.java:138)
>>         at
>> org.apache.camel.impl.**DefaultProducerTemplate.send(**
>> DefaultProducerTemplate.java:**105)
>>         at
>> org.apache.camel.impl.**DefaultProducerTemplate.send(**
>> DefaultProducerTemplate.java:**91)
>>         at
>> net.eads.itcore.esb.pelco.**SystemManagerBean.**getDevicesSimple(**
>> SystemManagerBean.java:204)
>> ...
>>
>>
>> Here is the wsdl (with two elements in the response "GetDevicesResponse"
>> resp1and resp2) :
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>>
>> <wsdl:definitions name="DeviceRegistrySimple"
>> targetNamespace="http://**wgcorp.net/**DeviceRegistrySimple<http://wgcorp.net/DeviceRegistrySimple>"
>> xmlns:soap="
>> http://schemas.xmlsoap.org/**wsdl/soap/<http://schemas.xmlsoap.org/wsdl/soap/>
>> "
>>  
>> xmlns:wsdl="http://schemas.**xmlsoap.org/wsdl/<http://schemas.xmlsoap.org/wsdl/>"
>> xmlns:tns="
>> http://wgcorp.net/**DeviceRegistrySimple<http://wgcorp.net/DeviceRegistrySimple>
>> ">
>>
>> <!-- Types -->
>> <wsdl:types>
>> <xsd:schema 
>> targetNamespace="http://**wgcorp.net/**DeviceRegistrySimple<http://wgcorp.net/DeviceRegistrySimple>
>> "
>>  
>> xmlns:xsd="http://www.w3.org/**2001/XMLSchema<http://www.w3.org/2001/XMLSchema>
>> ">
>>
>> <xsd:element name="GetDevices">
>>  <xsd:complexType>
>> <xsd:sequence>
>> <xsd:element name="arg1" type="xsd:string" />
>>  </xsd:sequence>
>> </xsd:complexType>
>> </xsd:element>
>>  <xsd:element name="GetDevicesResponse">
>> <xsd:complexType>
>>  <xsd:sequence>
>> <xsd:element name="resp1" type="xsd:string" />
>>  <xsd:element name="resp2" type="xsd:string" />
>> </xsd:sequence>
>>  </xsd:complexType>
>> </xsd:element>
>> </xsd:schema>
>>  </wsdl:types>
>>
>> <!-- Messages -->
>> <wsdl:message name="GetDevices">
>>  <wsdl:part name="parameters" element="tns:GetDevices" />
>> </wsdl:message>
>>  <wsdl:message name="GetDevicesResponse">
>> <wsdl:part name="parameters" element="tns:**GetDevicesResponse" />
>>  </wsdl:message>
>>
>> <!-- Ports -->
>> <wsdl:portType name="DeviceRegistryPortType">
>>  <wsdl:operation name="GetDevices">
>> <wsdl:input message="tns:GetDevices" />
>>  <wsdl:output message="tns:**GetDevicesResponse" />
>> </wsdl:operation>
>>  </wsdl:portType>
>>
>> <!-- Bindings -->
>> <wsdl:binding name="DeviceRegistry" type="tns:**DeviceRegistryPortType">
>>  <soap:binding style="document"
>> transport="http://schemas.**xmlsoap.org/soap/http<http://schemas.xmlsoap.org/soap/http>"
>> />
>>  <wsdl:operation name="GetDevices">
>> <soap:operation
>> soapAction="urn:#GetDevices" />
>>  <wsdl:input>
>> <soap:body use="literal" />
>> </wsdl:input>
>>  <wsdl:output>
>> <soap:body use="literal" />
>> </wsdl:output>
>>  </wsdl:operation>
>> </wsdl:binding>
>>
>> <wsdl:service name="DeviceRegistry">
>>  <wsdl:port name="DeviceRegistry" binding="tns:DeviceRegistry">
>> <soap:address 
>> location="http://localhost:**60001/control/DeviceRegistry-1<http://localhost:60001/control/DeviceRegistry-1>
>> **" />
>>  </wsdl:port>
>> </wsdl:service>
>> </wsdl:definitions>
>>
>> The cxf endpoint definition in camel context :
>>
>> <cxf:cxfEndpoint id="**cxfDeviceRegistryWsEndpoint"
>> address="http://localhost:**60001/control/**DeviceRegistrySimple<http://localhost:60001/control/DeviceRegistrySimple>
>> "
>> serviceClass="net.wgcorp.**deviceregistrysimple.**
>> DeviceRegistryPortType">
>> <cxf:properties>
>> <entry key="dataFormat" value="POJO" />
>> </cxf:properties>
>> </cxf:cxfEndpoint>
>>
>> The message is correctly sent to the distant endpoint, I receive the
>> response but I have this WARN in my logs... Moreover the result message
>> contents list is empty at index 0 and 1. Any ideas on what is wrong ?
>>
>> Thanks for your help.
>> William
>>
>>
>
>
> --
> Willem
> ------------------------------**----
> FuseSource
> Web: http://www.fusesource.com
> Blog:    
> http://willemjiang.blogspot.**com<http://willemjiang.blogspot.com>(English)
>        http://jnn.javaeye.com (Chinese)
> Twitter: willemjiang Weibo: willemjiang
>

Reply via email to