Java 调用返回complexType的WS

Java 调用返回complexType的WS,java,web-services,axis,Java,Web Services,Axis,我必须调用一个返回complexType的WS <WSResponse xmlns="http://uri.org/"> <ConvertResult> <param1>string</param1> <param2>string</param2> <param3>int</param3> <param4>string</param4>

我必须调用一个返回complexType的WS

<WSResponse xmlns="http://uri.org/">
  <ConvertResult>
    <param1>string</param1>
    <param2>string</param2>
    <param3>int</param3>
    <param4>string</param4>
  </ConvertResult>
</WSResponse>
ISO在哪里

class ISO implements Serializable {
    String param1;
    String param2;
    int param3;
    String param4;
}
但我明白了

反序列化参数“ConvertResult”:找不到类型ISO的反序列化程序

我以前没有在WS-calls中使用过complexTypes,所以我有点迷茫。我该如何得到这样的答复?我试着把这个加到电话里

BeanSerializerFactory bsf =   new BeanSerializerFactory(ISO.class,new QName("","ISO"));
BeanDeserializerFactory bdf = new BeanDeserializerFactory(ISO.class,new QName("","ISO"));
call.registerTypeMapping(ISO.class,new QName("","ISO"), bsf, bdf);
按照建议,但我得到了

SimpleDeserializer在试图反序列化的内容中遇到了一个子元素,这不是预期的

我想我对所有我尝试过的解决方案都有点纠结——什么都不管用。我知道ws是有效的,因为我已经尝试过用ws中相应的更改将complexType更改为简单字符串,并且它是有效的,所以我一定是对返回类型做了一些错误的处理

你能帮我吗


PD:我已尝试添加和删除映射和beanDeserializer的命名空间,但仍然没有成功。

好的,要解决此问题:

我对如何将WSDL映射到java代码感到非常困惑。我的错误是手工做ISO课程。我最终用源代码创建了这个存根

这就是WSDL2Java,它拯救了生命。之后,我在文件夹中得到了一堆类,将它们复制到我的项目中,更改了包引用,瞧。最后的代码是这个

call.addParameter(new QName("http://uri.org/","param"), XMLType.XSD_STRING, ParameterMode.IN); 
call.setReturnType(new QName("","ISO"), ISO.class);

Object params[]={ param };
ISO ret = (ISO) call.invoke(params);
我意识到这对很多人来说可能很简单,但我真的很困惑,我遇到的不同错误和不同的解决方案让我更加困惑。我把这个留在这里,以防对别人有帮助

这可能对某些人也有用

BeanSerializerFactory bsf =   new BeanSerializerFactory(ISO.class,new QName("","ISO"));
BeanDeserializerFactory bdf = new BeanDeserializerFactory(ISO.class,new QName("","ISO"));
call.registerTypeMapping(ISO.class,new QName("","ISO"), bsf, bdf);
import org.apache.axis.wsdl.WSDL2Java;

public class Random {

    public static void main(String[] args) {
        String[] params = new String[] {"-v", "-D", "-o c:/projects/WSTest", "http://URL to WSDL file"};  
        try  {  
            WSDL2Java.main(params);  
        } catch (Exception ex) {  
            ex.printStackTrace()  
        }  
    }
} 
call.addParameter(new QName("http://uri.org/","param"), XMLType.XSD_STRING, ParameterMode.IN); 
call.setReturnType(new QName("","ISO"), ISO.class);

Object params[]={ param };
ISO ret = (ISO) call.invoke(params);