axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dino Chiesa" <din...@microsoft.com>
Subject RE: org.xml.sax.SAXException: SimpleDeserializer encountered a child element...
Date Tue, 15 Mar 2005 23:56:40 GMT
Ps: you originally said  you were using AXIS 1.2RC3, 
But that WSDL doc (which I still cannot parse)
says it was generated by AXIS 1.2RC2. 

??

Seems like in your WSDD you are specifying a static WSDL?  Is that
right? 
Then there is nothing guaranteeing that the static WSDL you are serving
actually conforms to what your code is expecting. 

The static WSDL file could have a picture of tweety bird in it, but that
doesn't mean your MessageService actually implements the tweety bird
contract. 

-Dino



-----Original Message-----
From: BALDWIN, ALAN J [AG-Contractor/1000]
[mailto:alan.j.baldwin@monsanto.com] 
Sent: Tuesday, March 15, 2005 5:40 PM
To: 'axis-user@ws.apache.org'
Subject: RE: org.xml.sax.SAXException: SimpleDeserializer encountered a
child 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/MessageS
ervice">

	<!--
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/MessageS
ervice">
	<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);
    }

}






Mime
View raw message