You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-user@xml.apache.org by Matthew Forsyth <ma...@bungo.com> on 2002/03/26 19:42:24 UTC

Need Help Returning Literal XML Document as a SOAP response!

Please... i have hit a major roadblock here and could really use some help.
I'd be very grateful.

I am attempting to return a literal xml document as a response part.

So I created a service class and method that would return a
"org.w3c.dom.Element", and registered this service and method. When I sent
my first SOAP request to the server, Apache SOAP correctly located the
service method that I had created.

However, my server does not seem to know how to serialize an Element (seems
like such a trivial thing to get stuck on... sigh).  It produces a SOAP
fault:

=========================================
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
	<SOAP-ENV:Body>
		<SOAP-ENV:Fault>
			<faultcode>SOAP-ENV:Server</faultcode>
			<faultstring>java.lang.IllegalArgumentException: No Serializer found to
serialize a 'org.w3c.dom.Element' using encoding style
'http://schemas.xmlsoap.org/soap/encoding/'.</faultstring>
			<faultactor>/cw/soapRpcRouter</faultactor>
		</SOAP-ENV:Fault>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
===============================================

It seems perhaps I need to tell it to use
http://xml.apache.org/xml-soap/literalxml
as the encoding style for the response... which is what I have indicated in
my WSDL document for this service... but how do I tell the Apache Soap
server that this is my intention?

Anyway following the advice of the faq I instead added a Type Mapping to the
service,
telling it to use
org.apache.soap.encoding.literalxml.XMLParameterSerializer
To serialize and deserialize org.w3c.dom.Element...
But this doesn't work either.  This serializer seems to actually expect
Parameter objects as opposed to XML Elements... I get the following
exception which in turn produces a server side SOAP Fault:

===============================================

java.lang.ClassCastException: org.apache.xerces.dom.ElementImpl
	at
org.apache.soap.encoding.literalxml.XMLParameterSerializer.marshall(XMLParam
eterSerializer.java:85)
	at
org.apache.soap.encoding.soapenc.ParameterSerializer.marshall(ParameterSeria
lizer.java:102)
	at org.apache.soap.rpc.RPCMessage.marshall(RPCMessage.java:267)
	at org.apache.soap.Body.marshall(Body.java:145)
	at org.apache.soap.Envelope.marshall(Envelope.java:195)
	at
org.apache.soap.providers.RPCJavaProvider.invoke(RPCJavaProvider.java:133)
	at
org.apache.soap.server.http.RPCRouterServlet.doPost(RPCRouterServlet.java:28
7)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:247)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:243)
	at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
	at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:201)
	at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
	at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164
)
	at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
	at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java:170)
	at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170
)
	at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
	at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:163)
	at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
	at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:
1011)
	at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106
)
	at java.lang.Thread.run(Thread.java:484)