2016-04-15 25 views
0

我有兩個在WebSphere 8.5.5上運行的舊Web服務。 稱他們爲serviceOne和serviceTwo。 ServiceOne正在調用serviceTwo。 要做到這一點,serviceOne ear包含serviceTwo客戶端。 我們需要驗證serviceTwo。我們試圖使用PolicySets/Bindings來配置用戶名和密碼,並讓serviceTwoClient將它們傳遞給serviceTwo提供者。將Web服務客戶端與其他服務websphere一起打包

它們打包,現在的方式是:

-- serviceOne.ear 
| 
-- serviceOneEJB.jar 
| | 
| -- serviceTwoClient.jar 
-- serviceOneWeb.war 

我們的問題是,爲了包裝serviceOne耳朵的WebSphere,以檢測其中的serviceTwo客戶端,並在服務列表中它 - >客戶端提供商所以我們可以附加PolicySet。

在當前的打包方案中,serviceTwo客戶端未被檢測到。

所以我試着拉動ear文件的根級別的serviceTwoClient.jar。這沒有幫助,serviceTwo客戶端未在客戶端提供商下列出。

然後我嘗試將serviceTwo客戶端打包爲一個war文件並將其打包在耳朵的頂層。這有助於客戶在管理控制檯上列出客戶端提供商;但我有兩種選擇: - 保留與serviceOneEJB打包在一起的舊jar文件。在這種情況下,服務調用可以正常工作,但是policyBindings不會將驗證信息與請求一起發送。我想這是因爲實際的調用通過jar並且不會調用war,並且不會調用policyBinding。 - 從serviceOneEJB.jar中刪除舊的jar。在這種情況下,服務調用失敗,因爲應用程序上下文未正確加載(實際上爲空)。

任何幫助/想法,非常感謝。

+0

如果您使用EJB模塊打包客戶端,我假定您正在從EJB調用它。你有沒有嘗試把'@ WebServiceRef'放入bean中,看看它是否可見呢? – Gas

回答

0

所以經過一些更多的挖掘,我找到了解決方案;將以下內容添加到serviceOneWeb應用程序的web.xml中:

<service-ref> 
     <service-ref-name>serviceTwo_Service</service-ref-name> 
     <service-interface>ServiceTwo class name</service-interface> 
     <wsdl-file>ServiceTwo.wsdl</wsdl-file> 
     <service-qname xmlns:pfx="service_two_ url">pfx:ServiceTwo</service-qname> 
    <port-component-ref> 
     <service-endpoint-interface>ServiceTwoClient_Service class</service-endpoint-interface> 
     <enable-mtom>false</enable-mtom> 
    </port-component-ref> 
    </service-ref> 


<security-constraint> 
    <display-name>SERVICE_ACCESS</display-name> 
    <web-resource-collection> 
      <web-resource-name>SERVICE_URLS</web-resource-name> 
      <url-pattern>/*</url-pattern> 
      <http-method>GET</http-method> 
      <http-method>PUT</http-method> 
      <http-method>HEAD</http-method> 
      <http-method>TRACE</http-method> 
      <http-method>POST</http-method> 
      <http-method>DELETE</http-method> 
      <http-method>OPTIONS</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
      <role-name>SERVICE_TWO_USER</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
      <auth-method>BASIC</auth-method> 
</login-config> 
<security-role> 
      <role-name>SERVICE_TWO_USER</role-name> 
</security-role>