SOAP response of a collection containing JAXB 2.0 annotated objects is not 
serialized
-------------------------------------------------------------------------------------

                 Key: XFIRE-911
                 URL: http://jira.codehaus.org/browse/XFIRE-911
             Project: XFire
          Issue Type: Bug
          Components: JAX-WS, JAXB 2.0, Spring
    Affects Versions: 1.2.5
         Environment: Java 6 (build 1.6.0-b105)
jaxws-2.1fcs
XFire 1.2.5
            Reporter: Frédéric Desmoulins
         Assigned To: Dan Diephouse
         Attachments: xfire-bogue.zip

When exposing a service that returns a collection of type T : Collection<T> 
doStuff() the response cannot be serialized by SoapSerializer. Everything works 
as espected with simple java types (i.e Collection of String) but when my 
webmethod returns a Collection of JAXB annotated objects it crashes while the 
response is serialized. 

Example of object: 
{code}
@XmlType(name = "xFakeObject", namespace = MODEL_NS)
public class XFakeObject {
        private String value;

        public XFakeObject() {
        }

        public XFakeObject(String string) {
                this.value = string;
        }

        public String getValue() {
                return value;
        }
}
{code}

Example of web service: 
{code}
@WebService(serviceName = "FakeService", targetNamespace = SERVICE_NS)
public class FakeService {
        @WebMethod
        public List<XFakeObject> fakeWebMethod() {
                ArrayList<XFakeObject> list = new ArrayList<XFakeObject>();
                list.add(new XFakeObject("My string..."));
                return list;
        }
}
{code}

The WSDL
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://tofino.homelinux.org/services"; 
xmlns:ns1="http://model.example.fragbase.com"; 
xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"; 
xmlns:tns="http://tofino.homelinux.org/services"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"; 
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope";>
  <wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://tofino.homelinux.org/services";>
<xsd:element name="fakeWebMethod">
<xsd:complexType/>
</xsd:element>
<xsd:element name="fakeWebMethodResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" 
type="ns1:ArrayOfXFakeObject"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://model.example.fragbase.com";>
<xsd:complexType name="ArrayOfXFakeObject">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="xFakeObject" 
nillable="true" type="ns1:xFakeObject"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
targetNamespace="http://model.example.fragbase.com"; version="1.0">
<xs:complexType name="xFakeObject">
<xs:sequence/>
</xs:complexType>
</xs:schema>
  </wsdl:types>
  <wsdl:message name="fakeWebMethodResponse">
    <wsdl:part name="parameters" element="tns:fakeWebMethodResponse">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="fakeWebMethodRequest">
    <wsdl:part name="parameters" element="tns:fakeWebMethod">
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name="FakeServicePortType">
    <wsdl:operation name="fakeWebMethod">
      <wsdl:input name="fakeWebMethodRequest" 
message="tns:fakeWebMethodRequest">
    </wsdl:input>
      <wsdl:output name="fakeWebMethodResponse" 
message="tns:fakeWebMethodResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="FakeServiceHttpBinding" type="tns:FakeServicePortType">
    <wsdlsoap:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="fakeWebMethod">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="fakeWebMethodRequest">
        <wsdlsoap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="fakeWebMethodResponse">
        <wsdlsoap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="FakeService">
    <wsdl:port name="FakeServiceHttpPort" binding="tns:FakeServiceHttpBinding">
      <wsdlsoap:address 
location="http://localhost:8080/Blank4XFoo/services/FakeService"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
{code}

The soap response while calling the webmethod
{code:xml}
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";><soap:Body><fakeWebMethodResponse
 xmlns="http://tofino.homelinux.org/services";><out 
xmlns="http://tofino.homelinux.org/services";><soap:Envelope 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Couldn't
 write message.</faultstring></soap:Fault></soap:Body></soap:Envelope>
{code}

The stack trace while calling the webmethod

{code}
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:129) - 
Invoking handler org.codehaus.xfire.service.binding.PostInvocationHandler in 
phase service
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase post-invoke
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:129) - 
Invoking handler org.codehaus.xfire.soap.handler.SoapSerializerHandler in phase 
post-invoke
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase policy
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase user
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase transport
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:129) - 
Invoking handler org.codehaus.xfire.soap.handler.SoapActionOutHandler in phase 
transport
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase send
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:129) - 
Invoking handler org.codehaus.xfire.handler.OutMessageSender in phase send
ERROR 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.service.binding.PostInvocationHandler.invoke(PostInvocationHandler.java:40)
 - org.codehaus.xfire.fault.XFireFault: Couldn't write message.
INFO  20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.DefaultFaultHandler.invoke(DefaultFaultHandler.java:39)
 - Fault occurred!
javax.xml.stream.XMLStreamException: No element was found to write: 
java.lang.ArrayIndexOutOfBoundsException: -1
        at 
com.sun.xml.stream.writers.XMLStreamWriterImpl.writeEndElement(XMLStreamWriterImpl.java:946)
        at 
org.codehaus.xfire.soap.SoapSerializer.writeMessage(SoapSerializer.java:83)
        at 
org.codehaus.xfire.transport.http.HttpChannel.writeWithoutAttachments(HttpChannel.java:56)
        at 
org.codehaus.xfire.transport.http.XFireServletChannel.sendViaServlet(XFireServletChannel.java:87)
        at 
org.codehaus.xfire.transport.http.XFireServletChannel.send(XFireServletChannel.java:44)
        at 
org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
        at 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
        at 
org.codehaus.xfire.service.binding.PostInvocationHandler.invoke(PostInvocationHandler.java:36)
        at 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
        at 
org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
        at 
org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
        at 
org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
        at 
org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
        at 
org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at 
com.fragbase.example.context.IdentityFilter.doFilter(IdentityFilter.java:42)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at 
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at 
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at 
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
        at 
com.sun.xml.stream.writers.XMLStreamWriterImpl$ElementStack.pop(XMLStreamWriterImpl.java:1948)
        at 
com.sun.xml.stream.writers.XMLStreamWriterImpl.writeEndElement(XMLStreamWriterImpl.java:921)
        ... 32 more
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.addHandler(HandlerPipeline.java:64) 
- adding handler [EMAIL PROTECTED] to phase post-invoke
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.addHandler(HandlerPipeline.java:64) 
- adding handler [EMAIL PROTECTED] to phase transport
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.addHandler(HandlerPipeline.java:64) 
- adding handler [EMAIL PROTECTED] to phase send
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.addHandler(HandlerPipeline.java:64) 
- adding handler [EMAIL PROTECTED] to phase user
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase post-invoke
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:129) - 
Invoking handler org.codehaus.xfire.soap.handler.FaultSoapSerializerHandler in 
phase post-invoke
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase policy
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase user
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:129) - 
Invoking handler org.codehaus.xfire.handler.CustomFaultHandler in phase user
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase transport
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:129) - 
Invoking handler 
org.codehaus.xfire.transport.http.XFireServletController$FaultResponseCodeHandler
 in phase transport
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:115) - 
Invoking phase send
DEBUG 20:54:24 [http-8080-Processor24] 
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:129) - 
Invoking handler org.codehaus.xfire.fault.FaultSender in phase send
{code}

I attach all the stuff in the zip file.

Hope this helps,
Fred

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira



---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to