2010-10-05 57 views
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之外獲得正確的包裝文檔字面支持?

回答