我有一些10年前的Java代码用于调用传统的SOAP身份验证服务。 WSDL是RPC:ENCODED并包含许多拼写错误。我希望能够轻松地将旧代码转换为Axis 1.4或其他东西,但遇到了障碍。我所看到的一切都想使用WSDL。有人可以帮助将其转换为不需要错误WSDL的现代代码吗?
这是SOAP调用部分:
SOAPMappingRegistry soapmappingregistry = new SOAPMappingRegistry();
BeanSerializer beanserializer = new BeanSerializer();
soapmappingregistry.mapTypes(Constants.NS_URI_SOAP_ENC, new QName(
"urn:xml-soap-session-demo", "authenticationresult"),
AuthenticationResult.class, beanserializer, beanserializer);
Call call = new Call();
call.setSOAPMappingRegistry(soapmappingregistry);
call.setTargetObjectURI("urn:Security");
call.setMethodName("authenticate");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector<Object> vector = new Vector<Object>();
vector.addElement(new Parameter("app", String.class, "PHS", null));
vector.addElement(new Parameter("user", String.class, userName, null));
vector.addElement(new Parameter("password", String.class, password, null));
vector.addElement(new Parameter("encryption", Integer.class, new Integer(0), null));
call.setParams(vector);
Response response = null;
URL endpointURL = new URL(endpoint);
response = call.invoke(endpointURL, "");
if (!response.generatedFault()) {
Parameter parameter = response.getReturnValue();
Object obj = parameter.getValue();
...
}
非常感谢。
答案 0 :(得分:2)
嗯,大多数soap框架都依赖于WSDL标准。 Axis,CXF,Spring WS等我认为你可以尝试Spring WS。当你不知道或不想使用整个WSDL时,它已经节省了我几次(但知道应该如何编码有效载荷)。
但是,如果服务充满了类型-o:s,为什么还要移植那个东西呢?旧客户端,旧服务 - 为什么不保持这种方式并在服务被替换为没有type-o:s的东西后升级代码?不管怎么说,我认为你最终会得到一些不那么丑陋的东西。