【问题标题】:Change ejb3 webservice url in weblogic在 weblogic 中更改 ejb3 webservice url
【发布时间】:2011-07-13 17:10:06
【问题描述】:

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

host:port/BeanClassName/MyServiceName

是否可以更改 webservice 的服务端点地址?即到

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

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

【问题讨论】:

  • 上述内容有用的一个原因是,在 Weblogic 集群环境中,您可以在 OHS (Oracle HTTP Server) 中创建一个条目,并根据需要在该条目下嵌套尽可能多的 Web 服务。示例主机:端口/OHSEntry/BeanClassName/ServiceName。否则,您需要为每个端点创建一个 OHS 条目。

标签: web-services ejb-3.0


【解决方案1】:

假设你有一个 EJB

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

首先,您应该为它编写一个 webservices.xml 文件,如下所示,因为它的部分将从完成实际端点配置的 weblogic-webservices.xml 引用回来。

webservices.xml(注意:通过添加 webservices.xml 类中的 webservice 注释会被覆盖!):

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

【讨论】:

  • 以上内容基本完成,但需要answer from here 才能使其工作。您需要确保类 WebService 注释中的 targetNamespace=xxx 与 webservices.xml 中的命名空间匹配。
【解决方案2】:

我找到了一种解决方案,可以将另一个端点添加到 WebLogic 从 JAX-WS Web 服务生成的端点上。

我有一个这样的网络服务(简化):

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

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

WebLogic 端点​​是 &lt;context&gt;/ClientService,但我希望它是 &lt;context&gt;/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 在两个端点都提供 Web 服务。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2012-02-09
    相关资源
    最近更新 更多