关于这个错误我在网上搜索到的原因如下:但是由于本人能力有限,看得不是太懂。
修复Axis(1.2Beta版本)的一个bug
部署在Axis的WS服务的encodingStyle有encoded和literal两种方式,分别是”http://schemas.xmlsoap.org/soap/encoding/”和”literal”,这些部属信息会反映在server-config.wsdd。 MessageContext的TypeMappingRegistry包含了两个TypeMapping,每个TypeMapping分别对应着encoded和literal两个encodingStyle的部署信息。那么TypeMapping中有什么信息呢?比如,samples.Employee是使用literal方式部属的,那么literal的TypeMapping就有一个samples.Employee的注册信息,说明这个类可以使用literal方式来进行串行化和反串行化(当然同时samples.Employee类也可以以encoded方式部署),同时还包含了其他的信息(串行化器和反串行化器及其工厂)。这些信息在每次Axis系统启动的时候从server-config.wsdd读取出来,装载到MessageContext的TypeMappingRegistry中。 当在Axis中,要将消息进行串行化或反串行化时,Axis会从TypeMapping根据encodingStyle获取相应的自定义类信息。而如果消息是使用literal方式编码时,Axis就会通过org.apache.axis.Constants的URI_LITERAL_ENC属性来获取literal方式的TypeMapping,但是在Axis12Beta的源码中,org.apache.axis.Constants的URI_LITERAL_ENC为””,与server-config.wsdd中的“literal”不相符,所以获取不到”literal”的TypeMapping,这样就会产生以下的异常: AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: java.io.IOException: No serializer found for class samples.faults.Employee in registry org.apache.axis.encoding.DefaultTypeMappingImpl@128340 faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:java.io.IOException: No serializer found for class samples.faults.Employee in registry org.apache.axis.encoding.DefaultTypeMappingImpl@128340 at org.apache.axis.encoding.SerializationContextImpl.serializeActual(SerializationContextImpl.java:1248) at org.apache.axis.encoding.SerializationContextImpl.serialize(SerializationContextImpl.java:750) at org.apache.axis.message.RPCParam.serialize(RPCParam.java:191) at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:350) at org.apache.axis.message.MessageElement.output(MessageElement.java:1111) at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139) at org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:470) at org.apache.axis.message.MessageElement.output(MessageElement.java:1111) at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:268) at org.apache.axis.SOAPPart.getAsString(SOAPPart.java:499) at org.apache.axis.SOAPPart.getAsBytes(SOAPPart.java:386 at org.apache.axis.Message.getContentType(Message.java:465) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:685)
修复Axis(1.2Beta版本)的一个bug
部署在Axis的WS服务的encodingStyle有encoded和literal两种方式,分别是”http://schemas.xmlsoap.org/soap/encoding/”和”literal”,这些部属信息会反映在server-config.wsdd。 MessageContext的TypeMappingRegistry包含了两个TypeMapping,每个TypeMapping分别对应着encoded和literal两个encodingStyle的部署信息。那么TypeMapping中有什么信息呢?比如,samples.Employee是使用literal方式部属的,那么literal的TypeMapping就有一个samples.Employee的注册信息,说明这个类可以使用literal方式来进行串行化和反串行化(当然同时samples.Employee类也可以以encoded方式部署),同时还包含了其他的信息(串行化器和反串行化器及其工厂)。这些信息在每次Axis系统启动的时候从server-config.wsdd读取出来,装载到MessageContext的TypeMappingRegistry中。 当在Axis中,要将消息进行串行化或反串行化时,Axis会从TypeMapping根据encodingStyle获取相应的自定义类信息。而如果消息是使用literal方式编码时,Axis就会通过org.apache.axis.Constants的URI_LITERAL_ENC属性来获取literal方式的TypeMapping,但是在Axis12Beta的源码中,org.apache.axis.Constants的URI_LITERAL_ENC为””,与server-config.wsdd中的“literal”不相符,所以获取不到”literal”的TypeMapping,这样就会产生以下的异常: AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: java.io.IOException: No serializer found for class samples.faults.Employee in registry org.apache.axis.encoding.DefaultTypeMappingImpl@128340 faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:java.io.IOException: No serializer found for class samples.faults.Employee in registry org.apache.axis.encoding.DefaultTypeMappingImpl@128340 at org.apache.axis.encoding.SerializationContextImpl.serializeActual(SerializationContextImpl.java:1248) at org.apache.axis.encoding.SerializationContextImpl.serialize(SerializationContextImpl.java:750) at org.apache.axis.message.RPCParam.serialize(RPCParam.java:191) at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:350) at org.apache.axis.message.MessageElement.output(MessageElement.java:1111) at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139) at org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:470) at org.apache.axis.message.MessageElement.output(MessageElement.java:1111) at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:268) at org.apache.axis.SOAPPart.getAsString(SOAPPart.java:499) at org.apache.axis.SOAPPart.getAsBytes(SOAPPart.java:386 at org.apache.axis.Message.getContentType(Message.java:465) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:685)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货