users@jax-rpc.java.net

[Fwd: [Fwd: help about jax-rpc]]

From: Amlan Sengupta <Amlan.Sengupta_at_Sun.COM>
Date: Tue, 14 Jan 2003 10:33:02 -0800

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