环境:jdk1.5,weblogic9.2,tomcat5
报错信息如下:
javax.xml.rpc.JAXRPCException: failed to invoke operation 'ApplyGJ' due to an error in the soap layer (SAAJ); nested exception is: Message[ failed to serialize interface javax.xml.soap.SOAPElementweblogic.xml.schema.binding.SerializationException: mapping lookup failure. class=interface javax.xml.soap.SOAPElement class context=TypedClassContext{schemaType=['http://test.org/']:ApplyGJ}]StackTrace[
javax.xml.soap.SOAPException: failed to serialize interface javax.xml.soap.SOAPElementweblogic.xml.schema.binding.SerializationException: mapping lookup failure. class=interface javax.xml.soap.SOAPElement class context=TypedClassContext{schemaType=['http://test.org/']:ApplyGJ}
at weblogic.webservice.core.DefaultPart.invokeSerializer(DefaultPart.java:335)
at weblogic.webservice.core.DefaultPart.toXML(DefaultPart.java:300)
at weblogic.webservice.core.DefaultMessage.toXML(DefaultMessage.java:651)
at weblogic.webservice.core.ClientDispatcher.send(ClientDispatcher.java:209)
at weblogic.webservice.core.ClientDispatcher.dispatch(ClientDispatcher.java:146)
at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:473)
at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:459)
at weblogic.webservice.core.rpc.CallImpl.invoke(CallImpl.java:569)
at weblogic.webservice.core.rpc.CallImpl.invoke(CallImpl.java:422)
at org.springframework.remoting.jaxrpc.JaxRpcPortClientInterceptor.performJaxRpcCall(JaxRpcPortClientInterceptor.java:547)
at org.springframework.remoting.jaxrpc.JaxRpcPortClientInterceptor.invoke(JaxRpcPortClientInterceptor.java:507)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
原因:
weblogic下访问webservic取ServiceFactory.SERVICEFACTORY_PROPERTY时,默认的是weblogic.webservice.core.rpc.ServiceFactoryImpl。(weblogic rpc的实现)
spring JaxRpcPortProxyFactoryBean访问webservice,需要设置系统属性ServiceFactory.SERVICEFACTORY_PROPERTY为org.apache.axis.client.ServiceFactory,
即使用org.apache.axis.client.ServiceFactory方式调用webservice。
解决方法:
在调用webservice前,设置系统属性:
System.setProperty(ServiceFactory.SERVICEFACTORY_PROPERTY, "org.apache.axis.client.ServiceFactory");
即可.
另外找到类似问题,http://blog.csdn.net/bibitoo712/archive/2009/01/08/3732866.aspx