2016-04-15 5 views
0

Ich habe zwei ältere Web-Services auf WebSphere 8.5.5 ausgeführt. Rufen Sie sie serviceOne und serviceTwo. ServiceOne ruft serviceTwo auf. Dazu enthält serviceOne ear den ServiceTwo client. Wir haben die Anforderung, serviceTwo zu authentifizieren. Wir versuchen, PolicySets/Bindings zu verwenden, um den Benutzernamen und das Passwort zu konfigurieren und sie an den ServiceTwo-Provider zu übergeben.Paket Web Service-Client zusammen mit einem anderen Service Websphere

Die Art, wie sie jetzt verpackt ist:

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

Das Problem, das wir haben, ist das ServiceONE Ohr halten, um für WebSphere mit Verpacken des serviceTwo Client innerhalb es und geben Sie es unter Dienste zu erkennen -> Client-Provider So können wir das PolicySet anhängen.

Mit dem aktuellen Packschema wird der serviceTwo-Client nicht erkannt.

Also habe ich versucht, die serviceTwoClient.jar auf der Root-Ebene der Ear-Datei ziehen. Dies hilft nicht, der ServiceTwo-Client ist nicht unter Client-Provider aufgeführt.

Dann habe ich versucht, den ServiceTwo Client als eine Kriegsdatei zu packen und es auf der obersten Ebene des Ohrs zu packen. Dies hilft, wenn der Client in den Client-Providern in der Admin-Konsole aufgeführt wird. aber ich habe zwei Alternativen: - lassen Sie die alte JAR-Datei gepackt mit dem ServiceOneEJB. In diesem Fall funktioniert der Serviceaufruf einwandfrei, aber die Richtlinienbindungen senden die Authentifizierungsinformationen nicht mit der Anforderung. Ich schätze, das liegt daran, dass der eigentliche Aufruf das Jar durchläuft und nicht den Krieg aufruft und die policyBinding nicht aufgerufen wird. - Entfernen Sie das alte Glas aus der serviceOneEJB.jar. In diesem Fall schlägt der Serviceaufruf fehl, da der Anwendungskontext nicht ordnungsgemäß geladen wird (ist tatsächlich Null).

Jede Hilfe/Ideen werden sehr geschätzt.

+0

Wenn Sie den Client mit dem EJB-Modul packen, nehme ich an, dass Sie ihn von EJB aus aufrufen. Haben Sie versucht, '@ WebServiceRef' in die Bean einzufügen und zu sehen, ob sie dann sichtbar ist? – Gas

Antwort

0

also nach etwas mehr Graben fand ich die Lösung; Fügen Sie der web.xml der serviceOneWeb App Folgendes hinzu:

<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> 
Verwandte Themen