【发布时间】:2010-10-05 05:30:35
【问题描述】:
我使用 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 中获得正确的包装文档文字支持?
【问题讨论】: