Hi all -
We've got a schema setup as follows, with one of the elements being an
extension of an abstract supertype:
<xsd:schema xmlns:xsd="
http://www.w3.org/2001/XMLSchema"
xmlns:base="
http://generic" xmlns:v1="
http://someurl"
targetNamespace="
http://someurl">
<xsd:import namespace="
http://generic" schemaLocation="base.xsd"/>
<xsd:element name="operation">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="response" type="base:Response"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="subtype">
<xsd:complexContent>
<xsd:extension base="base:supertype">
<xsd:sequence>
<xsd:element name="someElement" type="v1:someType"
minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="someType">
<xsd:sequence>
<xsd:element name="result" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
With the supertype being defined as:
<xsd:schema xmlns:xsd="
http://www.w3.org/2001/XMLSchema"
targetNamespace="
http://generic"
xmlns:base="
http://generic">
<xsd:complexType name="Response">
<xsd:sequence>
<xsd:element name="details" type="base:superType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="supertype" abstract="true">
</xsd:complexType>
</xsd:schema>
The problem I'm getting is an NPE inside SOAPEncoder at line 366 when I
try to serialize a document conforming to this schema:
com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher receive
SEVERE: Error in encoding SOAP Message
Error in encoding SOAP Message
at
com.sun.xml.ws.encoding.soap.server.SOAPXMLEncoder.toSOAPMessage(SOAPXML
Encoder.java:113)
at
com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.makeSOAPMessag
e(SOAPMessageDispatcher.java:350)
at
com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.receive(SOAPMe
ssageDispatcher.java:155)
at com.sun.xml.ws.server.Tie.handle(Tie.java:88)
at
com.sun.xml.ws.transport.http.servlet.WSServletDelegate.handle(WSServlet
Delegate.java:333)
at
com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServlet
Delegate.java:288)
at
com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:77
)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:237)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:157)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilte
r.java:75)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:186)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:157)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:214)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:104)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
20)
at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCon
textValve.java:198)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:152)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:104)
at
org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipa
lValve.java:44)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:102)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAs
sociationValve.java:169)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:102)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
20)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:137)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:104)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:118)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:102)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535
)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:102)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
20)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:109)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:104)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
20)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:79
9)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:705)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:57
7)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:683)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException
at
com.sun.xml.ws.encoding.soap.SOAPEncoder.serializeReader(SOAPEncoder.jav
a:365)
at
com.sun.xml.ws.encoding.soap.SOAPEncoder.serializeSource(SOAPEncoder.jav
a:437)
at
com.sun.xml.ws.encoding.soap.SOAPEncoder.writeBody(SOAPEncoder.java:573)
at
com.sun.xml.ws.encoding.soap.server.SOAPXMLEncoder.toSOAPMessage(SOAPXML
Encoder.java:95)
... 41 more
An example instance doc:
<ns:operation xsi:schemaLocation="
http://someurl
http://someurl/schema.xsd" xmlns:ns="
http://someurl"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance">
<response>
<message/>
<details xsi:type="ns:subtype" xmlns:ns="
http://someurl"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance">
<someElement>
<result>true</result>
</someElement>
</details >
</response>
</ns:operation>
The offending code:
if (writerURI == null || ((nsPrefix.length() == 0) || (prefix.length()
== 0)) ||
(!nsPrefix.equals(prefix) && !writerURI.equals(readerURI)))
{
When attempting to encode the sample response above, it throws the NPE
because writerURI is not null, and nsPrefix is not empty, but prefix is
null for the details element. I should mention that this was using
Dispatch and Provider api rather than using JAXB. I had the same
results under 2.0 and 2.1 of jax-ws. Both xerces and xmlbeans indicate
that the instance doc is valid, and I have no problem returning the same
doc under jax-rpc. Any thoughts?
Thanks,
Ken