我使用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>
显然我需要声明错误才能使异常正常 。 (有关处理自定义例外的信息,请参阅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获得适当的文档文字支持?