我使用Apache Axis 1来提供Web服务,该服务将Java对象自动转换为wsdl定义和soap响应。但是,默认情况下,Axis似乎默认提供rpc编码的数据。有没有一种方法可以强制将其转换为提供包装的文档文字数据?
到目前为止,文档对我没有多大帮助。我的服务声明如下:
<service name="myservice" provider="java:RPC" use="literal" style="wrapped">
<parameter name="wsdlTargetNamespace" value="http://www.acme.com/"/>
<parameter name="className" value="com.acme.MyService" />
<operation name="doSomething" returnQName="acme:Response">
<documentation>Does something.</documentation>
<fault name="MyException" type="acme:MyException" class="com.acme.MyException" />
</operation>
</service>
显然,我需要声明错误以使Exceptions几乎正常工作。 (有关处理自定义异常的信息,请参见this。)
但是,这仍然行不通,并且会给我一个例外。我发现我需要将此静态方法添加到每个对象中:
public static void registerTypeMapping(Call call) {
final String WSDL_TARGET_NAMESPACE = "http://www.acme.com/";
final QName QNAME = new QName(WSDL_TARGET_NAMESPACE);
call.registerTypeMapping(Reponse.class, QNAME,
new BeanSerializerFactory(Response.class, QNAME),
new BeanDeserializerFactory(Response.class, QNAME));
}
这使异常消失了,这并不是一件好事,因为现在什么也没有发生。进行这些更改后,我没有从服务中收到任何XML响应。除此之外,即使这行得通,也很麻烦在我的所有对象中添加奇怪的静态方法。
我有什么想念的吗?为了从Axis 1获得适当的包装文档文字支持,我真的需要做什么?
最佳答案
这是Axis 1.x文档中的相关部分,可能会有所帮助:
Service Styles - RPC, Document, Wrapped, and Message
关于java - 有没有一种方法可以强制Axis1生成文档文字WSDL和SOAP?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3861051/