必须使用java和apache轴调用wsdl中包含复杂tyles的远程Web服务。 解决方案http://axis.apache.org/axis/java/user-guide.html#WSDL2JavaBuildingStubsSkeletonsAndDataTypesFromWSDL对我来说还不够,因为我必须支持任何类型的类,我的意思是序列化类直到运行时才确定。我对简单类型没有问题,但是当在wsdl中找到复杂类型时,我会遇到问题。参见示例
private Object getParamData(org.apache.axis.client.Call call, Parameter parameter, String arg, Parameters parameters) {
QName paramType = org.apache.axis.wsdl.toJava.Utils.getXSIType(parameter);
TypeEntry type = parameter.getType();
if (type instanceof BaseType && ((BaseType)type).isBaseType()) {
DeserializerFactory factory = call.getTypeMapping().getDeserializer(paramType);
Deserializer deserializer = factory.getDeserializerAs(Constants.AXIS_SAX);
return ((SimpleDeserializer)deserializer).makeValue(arg);
} else {
// What to do for complex types?
// ElementDeserializerFactory defact = new ElementDeserializerFactory();
// ((Call)iCall).registerTypeMapping(Element.class, paramType, new ElementSerializerFactory, defact);
我可以创建反序列化器工厂,但是主动反序列化器是空的,我可以获得任何返回值。