7 Stimmen

Ändern der ejb3-Webservice-Url in Weblogic

Ich habe eine EJB3-Session-Bean, die annotiert ist mit @WebService(serviceName="MyServiceName", portName="MyPortName") . Wenn er in Weblogic 11g bereitgestellt wird, befindet sich der Dienstendpunkt unter

host:port/BeanClassName/MyServiceName

Ist es möglich, die Endpunktadresse des Webservice zu ändern, z. B. in

host:port/my/context/root/something/MyServiceName

Ich habe versucht, den Weblogic-Webservices.xml-Bereitstellungsdeskriptor zu verwenden, aber er erfordert den webservices.xml-Deskriptor, der ein WSDL-Speicherortelement erfordert, das jedoch vom Server generiert werden sollte und dessen Speicherort sich in den Entwicklungs- und Produktionsumgebungen unterscheidet.

0 Stimmen

Ein Grund für die Nützlichkeit des obigen Beispiels ist, dass Sie in einer Weblogic-Cluster-Umgebung einen einzigen Eintrag in OHS (Oracle HTTP Server) vornehmen und unter diesem Eintrag so viele Webdienste wie nötig einrichten können. Beispiel: host:port/OHSEntry/BeanClassName/ServiceName. Andernfalls müssen Sie für jeden Endpunkt einen OHS-Eintrag erstellen.

2voto

pentike Punkte 418

Angenommen, Sie haben eine EJB

package com.example;
@Stateless
@WebService
OrganizationService {...}

Als erstes sollten Sie eine webservices.xml-Datei wie folgt erstellen, da ihre Abschnitte von weblogic-webservices.xml referenziert werden, wo die eigentliche Endpunktkonfiguration vorgenommen wird.

webservices.xml (Achtung: durch Hinzufügen von webservices.xml werden Webservice-Annotationen in Klassen überschrieben!):

<?xml version="1.0" encoding="UTF-8"?>
<webservices xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
  <webservice-description>
  <!-- just a label, can be anything you want -->
  <webservice-description-name>MyServiceName</webservice-description-name>
  <port-component>
    <!-- just a label, can be anything you want -->
    <port-component-name>MyServicePort</port-component-name>
        <!-- Target namespace from wsdl -->
        <wsdl-port xmlns:ex="http://example.com/target/name/Space">ex:MyService</wsdl-port>
        <!-- Fully qualified class name of the ejb interface/bean providing the service -->
        <service-endpoint-interface>com.example.OrganizationService</service-endpoint-interface>
        <service-impl-bean>
        <!-- The class name of the bean providing the service -->
          <ejb-link>OrganizationService</ejb-link>
        </service-impl-bean>
    </port-component>
  </webservice-description>
</webservices>

In der Datei weblogic-webservices.xml können Sie dann jeden beliebigen Endpunkt definieren.

weblogic-webservices.xml:

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-webservices xmlns="http://www.bea.com/ns/weblogic/weblogic-webservices" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-webservices http://www.bea.com/ns/weblogic/weblogic-webservices/1.0/weblogic-webservices.xsd">
  <webservice-description>
  <!-- This must match the name given in webservices.xml -->
   <webservice-description-name>MyServiceName</webservice-description-name>
   <webservice-type>JAXWS</webservice-type>
    <port-component>
     <!-- This must match the name given in webservices.xml -->
      <port-component-name>MyServicePort</port-component-name>
      <service-endpoint-address>
        <webservice-contextpath>/myContextPath</webservice-contextpath>
        <webservice-serviceuri>/myServiceURI</webservice-serviceuri>
      </service-endpoint-address>
    </port-component>
  </webservice-description>
</weblogic-webservices>

0 Stimmen

Oben ist fast fertig, aber es dauerte Antwort von hier damit es funktioniert. Sie müssen sicherstellen, dass targetNamespace=xxx in der Klasse WebService annotation mit dem Namespace in webservices.xml übereinstimmt.

0voto

pharsicle Punkte 1199

Ich habe eine Lösung gefunden, die einen weiteren Endpunkt zu dem von einem JAX-WS-Webdienst von WebLogic generierten Endpunkt hinzufügt.

Ich habe einen Webdienst wie diesen (vereinfacht):

@WebService(name = "ClientService",
            portName = "ClientService",
            serviceName = "ClientService")
public class ClientWebService {

    @WebMethod
    public ExtClient findClientDetails(String ref) {
        // etc.
    }
 }

Der WebLogic-Endpunkt lautet <context>/ClientService aber ich möchte, dass es so ist <context>/client/01 .

Sur web.xml Ich habe:

<listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
    <servlet-name>WebServiceServlet</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>WebServiceServlet</servlet-name>
    <url-pattern>/client/01</url-pattern>
</servlet-mapping>

Jetzt bietet WebLogic den Webdienst an beiden Endpunkten an.

Die Angabe der URI in web.xml ist erforderlich, weil die JAX-WS-Bibliothek in WebLogic die Endpunktspezifikationen in sun-jaxws.xml . (Im Gegensatz dazu stellt GlassFish nur Enpoints zur Verfügung, die in sun-jaxws.xml .)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X