Categories: MSDN / DotNet / Java / Scripts / Linux / PHP Ask - La ask - La Answer

Axis error - No serializer found...

I am trying to invoke a webservice passing in a custom java bean object, which I have "beanmapped" in the deploy.wsdd but I keep getting the No serializer found for class ... in registry org.apache.axis.encoding.TypeMappingDelegate@e70e30 axis fault.

Java code snippet:

Request request = new Request();
...
Service service = new Service();

Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpointURL));
call.setOperationName(operation);
call.addParameter("arg1", new QName("Request", "local"), ParameterMode.IN);
call.setReturnType(new QName("Response", "local"));

Response response = (Response)call.invoke(new Object[] {request});

deploy.wsdd:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="myWebservice" provider="java:RPC">
<parameter name="className" value="com.test.webservice"/>
<parameter name="allowedMethods" value="retrieveData"/>
<beanMapping qname="ns:local" xmlns:ns="Request" languageSpecificType="java:com.test.messaging.Request"/>
<beanMapping qname="ns:local" xmlns:ns="Response" languageSpecificType="java:com.test.messaging.Response"/>
</service>
</deployment>
[1366 byte] By [Faceman] at [2007-11-11 8:51:31]
# 1 Re: Axis error - No serializer found...
have you done the typemapping in your bean class?
eg:
public static void registerTypeMapping(Call call) {
call.registerTypeMapping(MYBEAN.class, QNAME,
new BeanSerializerFactory(MYBEAN.class, QNAME),
new BeanDeserializerFactory(MYBEAN.class, QNAME));
}
graviton at 2007-11-11 22:34:11 >
# 2 Re: Axis error - No serializer found...
Hmm, I wasn't aware you needed to do that. None of the tutorials I read said anything about that. I will give it a try though. Cheers :)
Faceman at 2007-11-11 22:35:11 >
# 3 Re: Axis error - No serializer found...
registering a custom bean looks usually like this:

call.setOperation("myoperation");
call.addParameter("parameter1", Constants.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter("parameter2", Constants.XSD_BASE64,
javax.xml.rpc.ParameterMode.IN);
call.addParameter("parameter3", Constants.XSD_BASE64,
javax.xml.rpc.ParameterMode.IN);
call.setReturnType(MYBEAN.QNAME);
MYBEAN.registerTypeMapping(call);

where mybean looks like this:

public class MYBEAN{
private boolean successful;
private String message;
private String returnedxml;
public static final QName QNAME = new QName(
"http://mybean.anyhost.de", "MYBEAN");

public final String getMessage() {
return message;
}

public final void setMessage(String status) {
this.message = status;
}

public static void registerTypeMapping(Call call) {
call.registerTypeMapping(MYBEAN.class, QNAME,
new BeanSerializerFactory(MYBEAN.class, QNAME),
new BeanDeserializerFactory(MYBEAN.class, QNAME));
}

public final boolean isSuccessful() {
return successful;
}

public final void setSuccessful(boolean successful) {
this.successful = successful;
}

public final String getReturnedXml() {
return returnedxml;
}

public final void setReturnedXml(String returnedxml) {
this.returnedxml= returnedxml;
}
}
graviton at 2007-11-11 22:36:10 >