Web services 在weblogic中更改ejb3 Web服务url

Web services 在weblogic中更改ejb3 Web服务url,web-services,ejb-3.0,Web Services,Ejb 3.0,我有一个用@WebService(serviceName=“MyServiceName”,portName=“MyPortName”)注释的EJB3会话bean。将其部署到Weblogic 11g中时,服务端点位于 主机:端口/BeanClassName/MyServiceName 是否可以更改Web服务的服务端点地址?i、 e.至 host:port/my/context/root/something/MyServiceName 我尝试使用weblogic-webservices.xml部署描

我有一个用
@WebService(serviceName=“MyServiceName”,portName=“MyPortName”)
注释的EJB3会话bean。将其部署到Weblogic 11g中时,服务端点位于

主机:端口/BeanClassName/MyServiceName

是否可以更改Web服务的服务端点地址?i、 e.至

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


我尝试使用weblogic-webservices.xml部署描述符,但它需要webservices.xml描述符,该描述符需要WSDL位置元素,但该元素应该由服务器生成,并且在开发环境和产品环境中它的位置不同。

假设您有一个EJB

package com.example;
@Stateless
@WebService
OrganizationService {...}
首先,您应该为它编写一个webservices.xml文件,如下所示,因为它的部分将从实际端点配置完成的weblogic-webservices.xml引用回来

webservices.xml(注意:通过在类中添加webservices.xml,将覆盖webservice注释!):


我的服务名
MyServicePort
例:我的服务
com.example.OrganizationService
组织服务
然后在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>

我的服务名
JAXWS
MyServicePort
/myContextPath
/myServiceURI

我找到了一个解决方案,它将另一个端点添加到由WebLogic从JAX-WS web服务生成的端点上

我有这样一个web服务(简化):

WebLogic端点是
/ClientService
,但我希望它是
/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>

com.sun.xml.ws.transport.http.servlet.WSServletContextListener
WebServiceServlet
com.sun.xml.ws.transport.http.servlet.WSServlet
1.
WebServiceServlet
/客户/01
现在WebLogic在两个端点都提供了web服务


需要在
web.xml
中指定URI,因为WebLogic中的JAX-WS库忽略了
sun jaxws.xml
中的端点规范。(相比之下,GlassFish只公开在
sunjaxws.xml
中指定的enpoint)

几乎完成了,但它需要花费时间才能工作。您需要确保类WebService annotation中的targetNamespace=xxx与webservices.xml中的命名空间匹配。上述内容之所以有用,是因为在Weblogic群集环境中,您可以在OHS(Oracle HTTP Server)中创建一个条目,并根据需要在该条目下嵌套尽可能多的web服务。示例主机:port/OHSEntry/BeanClassName/ServiceName。否则,您需要为每个端点创建OHS条目。
@WebService(name = "ClientService",
            portName = "ClientService",
            serviceName = "ClientService")
public class ClientWebService {

    @WebMethod
    public ExtClient findClientDetails(String ref) {
        // etc.
    }
 }
<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>