You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by "BALDWIN, ALAN J [AG-Contractor/1000]" <al...@monsanto.com> on 2005/03/15 23:02:56 UTC

RE: org.xml.sax.SAXException: SimpleDeserializer encountered a ch ild element...

Here is the response I'm getting, if this helps.  I've seen several people having this problem on the web, but nobody seems to have posted any fixes.

<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
	<faultcode>soapenv:Server.userException</faultcode>
	<faultstring>org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.</faultstring>
	<detail>
		<ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">LCEVER</ns1:hostname>
	</detail>
</soapenv:Fault>

Thanks,

   -Alan Baldwin-


-----Original Message-----
From: BALDWIN, ALAN J [AG-Contractor/1000]
[mailto:alan.j.baldwin@monsanto.com]
Sent: Tuesday, March 15, 2005 2:56 PM
To: 'axis-user@ws.apache.org'
Subject: org.xml.sax.SAXException: SimpleDeserializer encountered a
child element...


Hi all, I'm having an issue with Apache Axis 1.2 RC3.  It is running on Tomcat 5.0.28.  The error I'm getting is "org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize".  I've tried tweaking the schema and wsdl but to no avail.  Nothing I do seems to get rid of this error.  I'm using a document/literal approach, as you will note below.  Is this a schema validation problem?  I have downloaded the axis source, but I haven't dug *too* deeply into it.

Can anyone help me?

Thanks a lot, 

  Alan Baldwin


Stack trace:

Caused by: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
	at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:143)
	at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1031)
	at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
	at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1140)
	at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:238)
	at org.apache.axis.message.RPCElement.getParams(RPCElement.java:386)
	at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:148)
	at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:319)


Here is my soap message (vb6 client):

<SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<echoMessage>
	<PurchaseOrder>
		<description>test</description>
	</PurchaseOrder>
</echoMessage>
</SOAP-ENV:Body>
<SOAP-ENV:Envelope>


Here is my wsdl:

<wsdl:definitions targetNamespace="http://localhost:8080/poc-axis-server/services/MessageService">

<wsdl:types>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified">
	<xs:element name="echoMessage">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="PurchaseOrder"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="PurchaseOrder">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="description" type="xs:string"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

</wsdl:types>

	<wsdl:message name="echoMessageResponse">
<wsdl:part element="impl:echoMessageReturn" name="echoMessageReturn"/>
</wsdl:message>

	<wsdl:message name="echoMessageRequest">
<wsdl:part element="impl:echoMessage" name="echoMessage"/>
</wsdl:message>

	<wsdl:portType name="JaxRpcMessageService">

	<wsdl:operation name="echoMessage">
<wsdl:input message="echoMessageRequest"/>
<wsdl:output message="echoMessageResponse"/>
</wsdl:operation>
</wsdl:portType>

	<wsdl:binding name="MessageServiceSoapBinding" type="impl:JaxRpcMessageService">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

	<wsdl:operation name="echoMessage">
<wsdlsoap:operation soapAction=""/>

	<wsdl:input>
<wsdlsoap:body use="literal"/>
</wsdl:input>

	<wsdl:output>
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>

	<wsdl:service name="JaxRpcMessageServiceService">

	<wsdl:port binding="impl:MessageServiceSoapBinding" name="MessageService">
<wsdlsoap:address location="http://localhost:8080/poc-axis-server/services/MessageService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


Here is my WSDD:

...snip...

  <service name="MessageService" style="document" use="literal" provider="java:RPC">
    <requestFlow>
      <handler type="soapmonitor"/>
    </requestFlow>
    <responseFlow>
      <handler type="soapmonitor"/>
    </responseFlow>
    <parameter name="allowedMethods" value="*"/>
    <parameter name="className" 
      value="com.farmsource.services.web.server.JaxRpcMessageService"/>
   
            
    <wsdlFile>PurchaseOrder.wsdl</wsdlFile>

   </service>

../snip....

Here is my Java code:

public class JaxRpcMessageService extends ServletEndpointSupport implements
        RemoteMessageService, MessageService {

    protected final Log logger = LogFactory.getLog(getClass());

    private MessageService messageService;

    //this is from a spring context.  this is working fine.
    protected void onInit() throws ServiceException {
        messageService = (MessageService) getWebApplicationContext().getBean(
                "messageService");
        logger.info("Service implementation (from application context):"
                + messageService.getClass());
    }

    public String echoMessage(SOAPElement po) {
        logger.info("Retrieving broadcast message from local service");
        return messageService.echoMessage(po);
    }

}