Изменить URL веб-службы ejb3 в WebLogic - PullRequest
7 голосов
/ 13 июля 2011

У меня есть сессионный компонент EJB3, помеченный @WebService(serviceName="MyServiceName", portName="MyPortName"). При развертывании в Weblogic 11g конечная точка службы находится в

host:port/BeanClassName/MyServiceName

Можно ли изменить адрес конечной точки службы веб-службы? то есть до

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

Я попытался использовать дескриптор развертывания weblogic-webservices.xml, но для него требуется дескриптор webservices.xml, для которого требуется элемент местоположения WSDL, но он должен быть сгенерирован сервером, а его расположение отличается в dev и prod. окружающая среда.

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Предположим, у вас есть EJB

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

Сначала вы должны написать для него файл webservices.xml следующим образом, поскольку на его разделы будут ссылаться обратно из файла weblogic-webservices.xml, где указана фактическая конфигурация конечной точки.done.

webservices.xml (Внимание: путем добавления аннотаций webservice.xml в классы переопределяются!):

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

Затем в файле weblogic-webservices.xml вы можете определить любую конечную точкувы хотите.

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 голосов
/ 16 мая 2013

Я нашел решение, которое добавляет другую конечную точку к той, которая была сгенерирована из веб-службы JAX-WS WebLogic.

У меня есть такой веб-сервис (упрощенно):

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

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

Конечной точкой WebLogic является <context>/ClientService, но я хочу, чтобы она была <context>/client/01.

Вweb.xml У меня есть:

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

Теперь WebLogic предлагает веб-сервис на обеих конечных точках.

Необходимо указать URI в web.xml, поскольку библиотека JAX-WS в WebLogic игнорирует конечную точкутехнические характеристики в sun-jaxws.xml.(Напротив, GlassFish предоставляет только точки доступа, указанные в sun-jaxws.xml.)

...