【问题标题】:How to initialize Java EE 5 JAX-WS 2.0 Web Service with Parameters如何使用参数初始化 Java EE 5 JAX-WS 2.0 Web 服务
【发布时间】:2010-09-01 20:15:24
【问题描述】:

应用配置:

  • Web 应用程序使用 java first 方法创建带有注释的 JAX-WS 2.0 Web 服务。
  • WebLogic 10.3

我的要求

我的要求是部署单个 Web 服务实现类,但要根据访问服务的 URL 更改逻辑。

问题: 我假设这样做的一个好方法是在 web.xml 中部署不同的映射并使用不同的参数初始化它们。有没有更好的办法?

关闭访问 Web 服务的 URL 的逻辑的最佳方法是什么?我应该尝试使用初始化参数在 web.xml 中配置两个 servlet 映射(尝试过,但无法使其工作),还是应该解析服务 impl 中的 URL?还有其他选择吗?

我尝试过的(但没有用)

我尝试在 web.xml 的 <servlet> 元素中添加 <init-param>。但是,无法访问 Web 服务内的 ServletConfig 对象来检索参数。 Web 服务不具备标准Servlet 的所有功能(即使我实现了ServletServletContextListener)。我只能访问WebServiceContext(似乎),从那里我只能获得<context-param> 元素——但我需要<init-param> 元素。

在 web.xml 中,我使用相同的 Java 类输入了两个 <servlet> 元素,但它们映射到两个不同的 URL,如下所示。注意每个 Servlet 映射中的“源”参数是如何不同的。

<servlet>
    <servlet-name>Foo</servlet-name>
    <servlet-class>com.Foo</servlet-class>
    <init-param>
        <param-name>source</param-name>
   <param-value>1</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Foo</servlet-name>
    <url-pattern>/Foo</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Bar</servlet-name>
    <servlet-class>com.Foo</servlet-class>
   <init-param>
        <param-name>source</param-name>
   <param-value>2</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Bar</servlet-name>
    <url-pattern>/Bar</url-pattern>
</servlet-mapping>  

【问题讨论】:

    标签: java web-services servlets jax-ws java-ee-5


    【解决方案1】:

    您很可能有,但您是否尝试在运行时使用MessageContext 来确定源是什么?

    @WebService
    public class CalculatorService implements Calculator
    {
    
        @Resource
        private WebServiceContext context;
    
        @WebMethod
        public void getCounter()
        {
            MessageContext mc = wsContext.getMessageContext();
            // you can grab the HttpSession
            HttpSession session = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
            // ...or maybe the path info is enough
            String path = mc.get(MessageContext.PATH_INFO);
            // the query itself should almost definitely be enough
            String query = (String) mc.get(MessageContext.QUERY_STRING);
        }
    
    }
    

    我的想法来自http://sirinsevinc.wordpress.com/category/jaxws/。不过没试过。

    【讨论】:

    • 这个或类似的解决方案似乎是唯一的解决方案。我会将此逻辑添加到 Soap 处理程序中,该处理程序在入站请求的链中执行(此时在消息中设置参数)。谢谢你的想法。我希望这将是一个简单的配置,但看起来还有更多。
    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2012-08-09
    • 2012-01-31
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多