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 scott <sc...@evolove.net> on 2003/09/08 10:13:51 UTC
need help with SAXException: Deserializing parameter
Trying to get my WSDD service going, using BidBuy as an example. To pass data
between client/server I created a "User" class that holds some data.
Now, when sending data from client to server, this is what I see:
POST /axis/services/ValidateFields HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.1
Host: localhost
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 765
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<validateUserData
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<data href="#id0"/>
</validateUserData>
<multiRef id="id0" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="ns1:User" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://localhost/axis/services/ValidateFields">
<name xsi:type="xsd:string">smaclure</name>
<phoneNumber xsi:type="xsd:string">02076545987</phoneNumber>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>
returns:
HTTP/1.1 500 Internal Server Error
Content-Type: text/xml; charset=utf-8
Date: Fri, 05 Sep 2003 15:11:30 GMT
Server: Apache Coyote/1.0
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>org.xml.sax.SAXException: Deserializing parameter
'data': could not find deserializer for type
{http://localhost/axis/services/ValidateFields}User</faultstring>
<detail/>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
At the moment, my deploy.wsdd looks like this;
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:ValidateFields="http://localhost:8080/axis/services/ValidateFields"
xmlns:reg="http://www.soapinterop.org/Registry">
<service name="ValidateFields" provider="java:RPC">
<namespace>http://localhost:8080/axis/services/ValidateFields</namespace>
<parameter name="className" value="example2.ValidateFields"/>
<parameter name="allowedMethods" value="*"/>
</service>
<beanMapping qname="ValidateFields:User"
languageSpecificType="java:example2.User"/>
</deployment>
I'm a bit confused as I searched this list and found a few related queries, but
their deployment syntax is different from the 'bidbuy' example.
So, I need a bit of a push in the right direction - am I doing the right thing?
My client code looks like this:
/*
Scott's test
*/
package example2 ;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import java.util.Map;
public class ValidateFieldsClient
{
public static void main(String [] args) throws Exception {
//String endpoint = "http://localhost:8080/axis/ValidateFields.jws";
String endpoint = "http://localhost/axis/services/ValidateFields";
String name = "Scott";
Service service = new Service();
Call call = (Call) service.createCall();
// test # 1
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName( "helloTest" );
call.addParameter( "name", XMLType.XSD_STRING, ParameterMode.IN );
call.setReturnType( XMLType.XSD_STRING );
String ret = "";
try
{
ret = (String) call.invoke( new Object [] { name });
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("Got result : " + ret);
// test #2
// register the User class
QName uqn = new QName(endpoint, "User");
Class cls = User.class;
call.registerTypeMapping(cls, uqn, BeanSerializerFactory.class,
BeanDeserializerFactory.class);
call.removeAllParameters(); // reset for next call
call.setOperationName( "validateUserData" );
call.addParameter( "data", uqn, ParameterMode.IN );
call.setReturnType( XMLType.XSD_ANY ); // not sure about this
User user = new User("smaclure", "02076545987");
Map usrData = null;
try
{
usrData = (Map)call.invoke( new Object [] { user });
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("Got userinfo : " + usrData.toString());
}
}
(test #1 works fine)
thanks,
Scott
Re: need help with SAXException: Deserializing parameter
Posted by Dimuthu Leelarathne <mu...@vijayaba.cse.mrt.ac.lk>.
Hi Scott,
<beanMapping > tag come before the service terminating tag i.e. </service>
Like this;
<service >
......
.................
<beanMapping qname="ValidateFields:User" languageSpecificType="java:example2.User"/>
</service>
Regards,
Dimuthu.
----- Original Message -----
From: "scott" <sc...@evolove.net>
To: <ax...@ws.apache.org>
Sent: Monday, September 08, 2003 2:13 PM
Subject: need help with SAXException: Deserializing parameter
> Trying to get my WSDD service going, using BidBuy as an example. To pass data
> between client/server I created a "User" class that holds some data.
>
> Now, when sending data from client to server, this is what I see:
>
> POST /axis/services/ValidateFields HTTP/1.0
> Content-Type: text/xml; charset=utf-8
> Accept: application/soap+xml, application/dime, multipart/related, text/*
> User-Agent: Axis/1.1
> Host: localhost
> Cache-Control: no-cache
> Pragma: no-cache
> SOAPAction: ""
>
> <?xml version="1.0" encoding="UTF-8"?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soapenv:Body>
> <validateUserData
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
> <data href="#id0"/>
> </validateUserData>
> <multiRef id="id0" soapenc:root="0"
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xsi:type="ns1:User" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns1="http://localhost/axis/services/ValidateFields">
> <name xsi:type="xsd:string">smaclure</name>
> <phoneNumber xsi:type="xsd:string">02076545987</phoneNumber>
> </multiRef>
> </soapenv:Body>
> </soapenv:Envelope>
>
> returns:
>
> HTTP/1.1 500 Internal Server Error
> Content-Type: text/xml; charset=utf-8
> Date: Fri, 05 Sep 2003 15:11:30 GMT
> Server: Apache Coyote/1.0
> Connection: close
>
> <?xml version="1.0" encoding="UTF-8"?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soapenv:Body>
> <soapenv:Fault>
> <faultcode>soapenv:Server.userException</faultcode>
> <faultstring>org.xml.sax.SAXException: Deserializing parameter
> 'data': could not find deserializer for type
> {http://localhost/axis/services/ValidateFields}User</faultstring>
> <detail/>
> </soapenv:Fault>
> </soapenv:Body>
> </soapenv:Envelope>
>
> At the moment, my deploy.wsdd looks like this;
>
> <deployment xmlns="http://xml.apache.org/axis/wsdd/"
> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
> xmlns:ValidateFields="http://localhost:8080/axis/services/ValidateFields"
> xmlns:reg="http://www.soapinterop.org/Registry">
> <service name="ValidateFields" provider="java:RPC">
> <namespace>http://localhost:8080/axis/services/ValidateFields</namespace>
> <parameter name="className" value="example2.ValidateFields"/>
> <parameter name="allowedMethods" value="*"/>
> </service>
> <beanMapping qname="ValidateFields:User"
> languageSpecificType="java:example2.User"/>
> </deployment>
>
> I'm a bit confused as I searched this list and found a few related queries, but
> their deployment syntax is different from the 'bidbuy' example.
>
> So, I need a bit of a push in the right direction - am I doing the right thing?
> My client code looks like this:
>
> /*
> Scott's test
> */
>
> package example2 ;
>
> import org.apache.axis.client.Call;
> import org.apache.axis.client.Service;
> import org.apache.axis.encoding.XMLType;
> import org.apache.axis.encoding.ser.BeanDeserializerFactory;
> import org.apache.axis.encoding.ser.BeanSerializerFactory;
>
> import javax.xml.namespace.QName;
> import javax.xml.rpc.ParameterMode;
>
> import java.util.Map;
>
> public class ValidateFieldsClient
> {
> public static void main(String [] args) throws Exception {
>
>
> file://String endpoint = "http://localhost:8080/axis/ValidateFields.jws";
> String endpoint = "http://localhost/axis/services/ValidateFields";
>
> String name = "Scott";
>
>
> Service service = new Service();
> Call call = (Call) service.createCall();
>
> // test # 1
> call.setTargetEndpointAddress( new java.net.URL(endpoint) );
> call.setOperationName( "helloTest" );
> call.addParameter( "name", XMLType.XSD_STRING, ParameterMode.IN );
> call.setReturnType( XMLType.XSD_STRING );
>
> String ret = "";
> try
> {
> ret = (String) call.invoke( new Object [] { name });
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
> System.out.println("Got result : " + ret);
>
> // test #2
>
> // register the User class
> QName uqn = new QName(endpoint, "User");
> Class cls = User.class;
> call.registerTypeMapping(cls, uqn, BeanSerializerFactory.class,
> BeanDeserializerFactory.class);
>
> call.removeAllParameters(); // reset for next call
> call.setOperationName( "validateUserData" );
> call.addParameter( "data", uqn, ParameterMode.IN );
> call.setReturnType( XMLType.XSD_ANY ); // not sure about this
>
> User user = new User("smaclure", "02076545987");
>
> Map usrData = null;
> try
> {
> usrData = (Map)call.invoke( new Object [] { user });
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
> System.out.println("Got userinfo : " + usrData.toString());
> }
> }
>
> (test #1 works fine)
>
> thanks,
> Scott
>
>