Can you check if the net.wgcorp.deviceregistrysimple.GetDevicesResponse is changed ?
On Tue Dec 20 18:02:19 2011, will mad wrote:
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





--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
        http://jnn.javaeye.com (Chinese)
Twitter: willemjiang Weibo: willemjiang

Reply via email to