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:48:42 UTC

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

I forgot to include this:

     <beanMapping
        languageSpecificType="java:com.farmsource.domain.PurchaseOrder"
        qname="impl:purchaseOrder"
        xmlns:impl="http://localhost:8080/poc-axis-server/services/MessageService"
      />

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


Actually, that WSDL validated in the eclipse plugin... I was including an external wsdl into the wsdd file so that axis would not generate one for me.  I have determined that is not the problem.  

Here is what is happening now (I've been dealing with this issue for a while):  I have a "PurchaseOrder" java bean with a "description" field on it.

Again, I'm using document/literal.

If the soap message looks like this, it works:

<SOAP-ENV:Body>
   <echoMessage>
   	<description>test...</description>
   </echoMessage>
<SOAP-ENV:Body>

This does NOT work:

<SOAP-ENV:Body>
   <echoMessage>
	<PurchaseOrder>
   		<description>test...</description>
	<PurchaseOrder>
   </echoMessage>
<SOAP-ENV:Body>


When I put the PurchaseOrder node in, it breaks.  This is just a proof of concept service, but when we implement, I will need the root node in there to validate against an industry standard schema.  In this case, I'm just using PurchaseOrder.


Any ideas?  Thanks for the reply.


Here is the WSDL: (copied from the running service, auto-generated from axis)

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

	<!--
WSDL created by Apache Axis version: 1.2RC2
Built on Nov 16, 2004 (12:19:44 EST)
-->

<wsdl:types>

<schema elementFormDefault="qualified" targetNamespace="http://localhost:8080/poc-axis-server/services/MessageService">
	<complexType name="purchaseOrder">
		<sequence>
			<element name="description" nillable="true" type="xsd:string"/>
		</sequence>
	</complexType>

	<element name="echoMessageReturn" type="xsd:string"/>

</schema>

<schema elementFormDefault="qualified" targetNamespace="http://server.web.services.farmsource.com">
		<import namespace="http://localhost:8080/poc-axis-server/services/MessageService"/>
		<element name="po" type="impl:purchaseOrder"/>
</schema>
</wsdl:types>

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

	<wsdl:message name="echoMessageRequest">
		<wsdl:part element="tns1:po" name="po"/>
	</wsdl:message>

	<wsdl:portType name="JaxRpcMessageService">

	<wsdl:operation name="echoMessage" parameterOrder="po">
		<wsdl:input message="impl:echoMessageRequest" name="echoMessageRequest"/>
		<wsdl:output message="impl:echoMessageResponse" name="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 name="echoMessageRequest">
			<wsdlsoap:body use="literal"/>
		</wsdl:input>

		<wsdl:output name="echoMessageResponse">
			<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>




-----Original Message-----
From: Dino Chiesa [mailto:dinoch@microsoft.com]
Sent: Tuesday, March 15, 2005 4:24 PM
To: axis-user@ws.apache.org
Subject: RE: org.xml.sax.SAXException: SimpleDeserializer encountered a
child element...


It looks like a disagreement in XML namespace. 

The echoMessage in the wsdl appears to be in a particular namespace,
whereas the VB6 client is sending a message in no namespace at all.  

    <echoMessage>
      <PurchaseOrder>
        <description>string</description>
      </PurchaseOrder>
    </echoMessage>


The WSDL you sent isn't a real wsdl.  It is missing a bunch of stuff?
So it is hard to say whether what I wrote above is right. 

 

-----Original Message-----
From: BALDWIN, ALAN J [AG-Contractor/1000]
[mailto:alan.j.baldwin@monsanto.com] 
Sent: Tuesday, March 15, 2005 5:03 PM
To: 'axis-user@ws.apache.org'
Subject: RE: org.xml.sax.SAXException: SimpleDeserializer encountered a
child 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(SimpleDeser
ializer.java:143)
	at
org.apache.axis.encoding.DeserializationContext.startElement(Deserializa
tionContext.java:1031)
	at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
165)
	at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava: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.ja
va: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/MessageS
ervice">

<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);
    }

}