Hi Jerry,
It seems that you do not have any serializers registered for
TestBean.
So when the TypeMapping Registry is accessed to do java <-> xml
its not able to Map TestBean to anything. Now there are some
predefined data types already in the type mapping registry. So
like string , int etc. So instead of TestBean if it was either
int or string, you would not have gotten this error.
So your solution to the problem is to register your serializer.
Example Code is Attached as example.txt. Please note that this
just a method I pasted on to this text file. I hope this will
help you out.
I would also encourage you to check out
http://forum.java.sun.com/forum.jsp?forum=331
We try to answer all questions @ it. Its a great resource for
problems like these.
Thanks AMlan
----------------------------------------------------------------------
To: JAXRPC-INTEREST_at_JAVA.SUN.COM
Hi, all.
I am a new bie of jax-rpc, I want to do some programm based on jwsdp
I download jwsdp1.0 , and do the examples follow the tuturior, it works.
I need to do my jax-rpc program, it is an applet, get datas from one
jax-rpc, and fill in one JTable,
So I chose $JWSDP/docs/tutorial/examples/jaxrpc/proxy to begin with,
( because the applet is running on client side, it need to connect server)
but the problem is that the function call should return two array of
string, one is for table header,
one is for table data, so I have to use one customed java bean .
Here is my step,
1. modify HelloIF.java and HelloImpl.java, add one function, also
modify HelloIFClient.java
2. add one TestBean.java under the same directory,
3. modify config.xml
4. ant build
ant deploy
ant build-dynamic
5. ant run to run the client program,
it produced one error message like this
Buildfile: build.xml
run:
[echo] Running the proxy.HelloClient program....
[java] A test proxy hello to Buzz!
[java] serialization error: no serializer is registered for (null,
{
http://com.test/types/MyHello}TestBean)
[java] at
com.sun.xml.rpc.encoding.DynamicInternalTypeMappingRegistry.getSerializer(DynamicInternalTypeMappingRegistry.java:62)
[java] at
com.sun.xml.rpc.encoding.soap.SOAPResponseSerializer.initialize(SOAPResponseSerializer.java:72)
[java] at
com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.initialize(ReferenceableSerializerImpl.java:47)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.createRpcResponseSerializer(BasicCall.java:436)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.getResponseDeserializer(BasicCall.java:410)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.invoke(BasicCall.java:279)
[java] at
com.sun.xml.rpc.client.dii.CallInvocationHandler.doCall(CallInvocationHandler.java:96)
[java] at
com.sun.xml.rpc.client.dii.CallInvocationHandler.invoke(CallInvocationHandler.java:68)
[java] at $Proxy0.getTestBean(Unknown Source)
[java] at proxy.HelloClient.main(Unknown Source)
[java]
[java] CAUSE:
[java]
[java] no serializer is registered for (null,
{
http://com.test/types/MyHello}TestBean)
[java] at
com.sun.xml.rpc.encoding.TypeMappingUtil.getSerializer(TypeMappingUtil.java:41)
[java] at
com.sun.xml.rpc.encoding.InternalTypeMappingRegistryImpl.getSerializer(InternalTypeMappingRegistryImpl.java:287)
[java] at
com.sun.xml.rpc.encoding.DynamicInternalTypeMappingRegistry.getSerializer(DynamicInternalTypeMappingRegistry.java:47)
[java] at
com.sun.xml.rpc.encoding.soap.SOAPResponseSerializer.initialize(SOAPResponseSerializer.java:72)
[java] at
com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.initialize(ReferenceableSerializerImpl.java:47)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.createRpcResponseSerializer(BasicCall.java:436)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.getResponseDeserializer(BasicCall.java:410)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.invoke(BasicCall.java:279)
[java] at
com.sun.xml.rpc.client.dii.CallInvocationHandler.doCall(CallInvocationHandler.java:96)
[java] at
com.sun.xml.rpc.client.dii.CallInvocationHandler.invoke(CallInvocationHandler.java:68)
[java] at $Proxy0.getTestBean(Unknown Source)
[java] at proxy.HelloClient.main(Unknown Source)
[java]
[java] CAUSE:
[java]
[java] no serializer is registered for (null,
{
http://com.test/types/MyHello}TestBean)
[java] at
com.sun.xml.rpc.encoding.TypeMappingUtil.getSerializer(TypeMappingUtil.java:41)
[java] at
com.sun.xml.rpc.encoding.InternalTypeMappingRegistryImpl.getSerializer(InternalTypeMappingRegistryImpl.java:287)
[java] at
com.sun.xml.rpc.encoding.DynamicInternalTypeMappingRegistry.getSerializer(DynamicInternalTypeMappingRegistry.java:47)
[java] at
com.sun.xml.rpc.encoding.soap.SOAPResponseSerializer.initialize(SOAPResponseSerializer.java:72)
[java] at
com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.initialize(ReferenceableSerializerImpl.java:47)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.createRpcResponseSerializer(BasicCall.java:436)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.getResponseDeserializer(BasicCall.java:410)
[java] at
com.sun.xml.rpc.client.dii.BasicCall.invoke(BasicCall.java:279)
[java] at
com.sun.xml.rpc.client.dii.CallInvocationHandler.doCall(CallInvocationHandler.java:96)
[java] at
com.sun.xml.rpc.client.dii.CallInvocationHandler.invoke(CallInvocationHandler.java:68)
[java] at $Proxy0.getTestBean(Unknown Source)
[java] at proxy.HelloClient.main(Unknown Source)
I dont know how to fix it, and it blocks me for some times,
Can you tell me what is wrong with my files, and what I have missed.
Thanks,
HelloProxyIF newHelloPort() throws Exception {
URL url = new URL(props.getProperty("wsdl.location.hello"));
Service helloService = factory.createService(url, new QName(WSDL_NAMESPACE_VALUE, HELLO_SERVICE));
// register the handlers
HandlerRegistry handlerRegistry = helloService.getHandlerRegistry();
QName port = new QName(WSDL_NAMESPACE_VALUE, HELLO_PORT);
List handlerChain = handlerRegistry.getHandlerChain(port);
HandlerInfo handlerInfo = new HandlerInfo();
handlerInfo.setHandlerClass(HelloClientHandler1.class);
handlerChain.add(handlerInfo);
handlerInfo = new HandlerInfo();
handlerInfo.setHandlerClass(HelloClientHandler2.class);
handlerChain.add(handlerInfo);
handlerInfo = new HandlerInfo();
handlerInfo.setHandlerClass(HelloClientHandler3.class);
Hashtable hashtable = new Hashtable();
hashtable.put(HELLO_CLIENT_REQUEST3, HELLO_CLIENT_REQUEST3);
hashtable.put(HELLO_CLIENT_RESPONSE3, HELLO_CLIENT_RESPONSE3);
handlerInfo.setHandlerConfig(hashtable);
handlerChain.add(handlerInfo);
TypeMappingRegistry registry = helloService.getTypeMappingRegistry();
TypeMapping typeMapping = registry.getTypeMapping(SOAPConstants.URI_ENCODING);
// One property bean serializer/deserializer
QName onePropBeanQname = new QName(TYPE_NAMESPACE_VALUE, BEAN_NAME);
CombinedSerializer onePropBeanSerializer = new OnePropBean_SOAPSerializer(onePropBeanQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING);
onePropBeanSerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, onePropBeanSerializer);
SerializerFactory onePropBeanSerializerFactory = new SingletonSerializerFactory(onePropBeanSerializer);
DeserializerFactory onePropBeanDeserializerFactory = new SingletonDeserializerFactory(onePropBeanSerializer);
CombinedSerializer stringSerializer = new SimpleTypeSerializer(QNAME_TYPE_STRING, DONT_ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING, XSDStringEncoder.getInstance());
typeMapping.register(OnePropBean.class, onePropBeanQname, onePropBeanSerializerFactory, onePropBeanDeserializerFactory);
// String[] serializer/deserializer
QName stringArrayTypeQname = new QName(TYPE_NAMESPACE_VALUE, "ArrayOfstring");
CombinedSerializer stringArraySerializer = new SimpleTypeArraySerializer(stringArrayTypeQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING, null, QNAME_TYPE_STRING, String.class, 1, null, (SimpleTypeSerializer)stringSerializer);
stringArraySerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, stringArraySerializer);
SerializerFactory stringArraySerializerFactory = new SingletonSerializerFactory(stringArraySerializer);
DeserializerFactory stringArrayDeserializerFactory = new SingletonDeserializerFactory(stringArraySerializer);
typeMapping.register(String[].class, stringArrayTypeQname, stringArraySerializerFactory, stringArrayDeserializerFactory);
// Name serializer/deserializer
QName nameQname = new QName(TYPE_NAMESPACE_VALUE, "Name");
CombinedSerializer nameSerializer = new Name_SOAPSerializer(nameQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING);
nameSerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, nameSerializer);
SerializerFactory nameSerializerFactory = new SingletonSerializerFactory(nameSerializer);
DeserializerFactory nameDeserializerFactory = new SingletonDeserializerFactory(nameSerializer);
typeMapping.register(Name.class, nameQname, nameSerializerFactory, nameDeserializerFactory);
// Name[] serializer/deserializer
QName nameArrayTypeQname = new QName(TYPE_NAMESPACE_VALUE, "ArrayOfName");
QName nameArrayElementQname = new QName("", "Name");
CombinedSerializer nameArraySerializer = new ObjectArraySerializer(nameArrayTypeQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING, nameArrayElementQname, nameQname, Name.class, 1, null);
nameArraySerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, nameArraySerializer);
SingletonSerializerFactory nameArraySerializerFactory = new SingletonSerializerFactory(nameArraySerializer);
SingletonDeserializerFactory nameArrayDeserializerFactory = new SingletonDeserializerFactory(nameArraySerializer);
typeMapping.register(Name[].class, nameArrayTypeQname, nameArraySerializerFactory, nameArrayDeserializerFactory);
// Inner class serializer/deserializer
QName innerQname = new QName(TYPE_NAMESPACE_VALUE, "Outer.Inner");
CombinedSerializer innerSerializer = new Outer_Inner_SOAPSerializer(innerQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING);
innerSerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, innerSerializer);
SerializerFactory innerSerializerFactory = new SingletonSerializerFactory(innerSerializer);
DeserializerFactory innerDeserializerFactory = new SingletonDeserializerFactory(innerSerializer);
typeMapping.register(Outer.Inner.class, innerQname, innerSerializerFactory, innerDeserializerFactory);
// Address serializer/deserializer
QName addressQname = new QName(TYPE_NAMESPACE_VALUE, "Address");
CombinedSerializer addressSerializer = new Address_SOAPSerializer(addressQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING);
addressSerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, addressSerializer);
SerializerFactory addressSerializerFactory = new SingletonSerializerFactory(addressSerializer);
DeserializerFactory addressDeserializerFactory = new SingletonDeserializerFactory(addressSerializer);
typeMapping.register(Address.class, addressQname, addressSerializerFactory, addressDeserializerFactory);
// Valuetype serializer/deserializer
QName vtQname = new QName(TYPE_NAMESPACE_VALUE, "ValueType");
CombinedSerializer vtSerializer = new ValueType_SOAPSerializer(vtQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING);
vtSerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, vtSerializer);
SerializerFactory vtSerializerFactory = new SingletonSerializerFactory(vtSerializer);
DeserializerFactory vtDeserializerFactory = new SingletonDeserializerFactory(vtSerializer);
typeMapping.register(ValueType.class, vtQname, vtSerializerFactory, vtDeserializerFactory);
// Valuetype[] serializer/deserializer
QName vtArrayTypeQname = new QName(TYPE_NAMESPACE_VALUE, "ArrayOfValueType");
QName vtArrayElementQname = new QName("", "ValueType");
CombinedSerializer vtArraySerializer = new ObjectArraySerializer(vtArrayTypeQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING, vtArrayElementQname, vtQname, ValueType.class, 1, null);
vtArraySerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, vtArraySerializer);
SingletonSerializerFactory vtArraySerializerFactory = new SingletonSerializerFactory(vtArraySerializer);
SingletonDeserializerFactory vtArrayDeserializerFactory = new SingletonDeserializerFactory(vtArraySerializer);
typeMapping.register(ValueType[].class, vtArrayTypeQname, vtArraySerializerFactory, vtArrayDeserializerFactory);
// Recursive serializer/deserializer
QName rtQname = new QName(TYPE_NAMESPACE_VALUE, "Recursive");
CombinedSerializer rtSerializer = new Recursive_SOAPSerializer(rtQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING);
rtSerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, rtSerializer);
SerializerFactory rtSerializerFactory = new SingletonSerializerFactory(rtSerializer);
DeserializerFactory rtDeserializerFactory = new SingletonDeserializerFactory(rtSerializer);
typeMapping.register(Recursive.class, rtQname, rtSerializerFactory, rtDeserializerFactory);
// Recursive[] serializer/deserializer
QName rtArrayTypeQname = new QName(TYPE_NAMESPACE_VALUE, "ArrayOfRecursive");
QName rtArrayElementQname = new QName("", "Recursive");
CombinedSerializer rtArraySerializer = new ObjectArraySerializer(rtArrayTypeQname, ENCODE_TYPE, NULLABLE, SOAPConstants.URI_ENCODING, rtArrayElementQname, rtQname, Recursive.class, 1, null);
rtArraySerializer = new ReferenceableSerializerImpl(SERIALIZE_AS_REF, rtArraySerializer);
SingletonSerializerFactory rtArraySerializerFactory = new SingletonSerializerFactory(rtArraySerializer);
SingletonDeserializerFactory rtArrayDeserializerFactory = new SingletonDeserializerFactory(rtArraySerializer);
typeMapping.register(Recursive[].class, rtArrayTypeQname, rtArraySerializerFactory, rtArrayDeserializerFactory);
HelloProxyIF helloPort = (HelloProxyIF)helloService.getPort(new QName(WSDL_NAMESPACE_VALUE, HELLO_PORT), HelloProxyIF.class);
/*
if (props.getProperty("secure").equals("yes")) {
((Stub)helloPort)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, props.getProperty("secure.secure.1"));
} else {
((Stub)helloPort)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, props.getProperty("plain.endpoint.1"));
}
*/
return helloPort;
}