Java 调用返回complexType的WS
我必须调用一个返回complexType的WSJava 调用返回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>
<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);