2
我使用Apache Axis 1來提供Web服務,該服務會自動將Java對象轉換爲wsdl定義和soap響應。不過,默認情況下,Axis默認情況下會提供rpc編碼數據。有沒有辦法強制它提供包裝的文檔文字數據呢?是否有強制Axis1生成文檔文字WSDL和SOAP的方法?
到目前爲止,文檔並沒有幫助我太多。我的服務宣言是這樣的:
<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之外獲得正確的包裝文檔字面支持?