2011-07-13 5 views
7

Tengo un bean de sesión EJB3 anotado con @WebService(serviceName="MyServiceName", portName="MyPortName"). Cuando se despliega en WebLogic 11g el extremo de servicio se encuentra enCambiar URL del servicio web ejb3 en weblogic

host:port/BeanClassName/MyServiceName

¿Es posible cambiar la dirección de punto final del servicio del servicio web? es decir, a

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

He intentado utilizar el descriptor de despliegue de WebLogic-webservices.xml, pero requiere el descriptor webservices.xml que requiere un elemento de ubicación de WSDL, pero que debería ser generada por el servidor y la ubicación de eso difiere en los entornos dev y prod.

+0

Una razón por la cual lo anterior es útil es que en un entorno agrupado de Weblogic, puede hacer una sola entrada en OHS (Servidor HTTP de Oracle) y anidar tantas web servicios según sea necesario en esa entrada. Ejemplo de host: puerto/OHSEntry/BeanClassName/ServiceName. De lo contrario, debe realizar una entrada de OHS para cada punto final. – 32U

Respuesta

1

Suponga que tiene un EJB

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

En primer lugar usted debe escribir un archivo webservices.xml de la siguiente manera, ya que sus secciones se hará referencia de vuelta de WebLogic-webservices.xml donde se realiza la configuración de punto final real .

webservices.xml (Precaución: al añadir anotaciones de servicio web webservices.xml en las clases se redefinen):

<?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> 

Luego, en el WebLogic-webservices.xml Se puede definir cualquier punto final que desea.

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

Arriba está casi completo, pero tomó [respuesta desde aquí] (http://stackoverflow.com/questions/20307201/set-contextpath-for-ejb3-webservice-on-weblogic-11g?rq=1) para hacerlo trabajo. Debe asegurarse de que targetNamespace = xxx en la clase La anotación de WebService coincida con el espacio de nombres en webservices.xml. – 32U

0

he encontrado una solución que añade otro punto final a la generada a partir de un servicio web JAX-WS WebLogic.

Tengo un servicio web como este (simplificado):

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

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

El punto final es WebLogic <context>/ClientService pero quiero que sea <context>/client/01.

En web.xml que tengo:

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

Ahora WebLogic ofrece el servicio web en ambos extremos.

Se necesita especificar el URI en web.xml porque la biblioteca JAX-WS en WebLogic ignora las especificaciones de punto final en sun-jaxws.xml. (En contraste, GlassFish solo expone puntos que se especifican en sun-jaxws.xml.)

Cuestiones relacionadas