如何使用参数初始化JavaEE5JAX-WS2.0Web服务

如何使用参数初始化JavaEE5JAX-WS2.0Web服务,java,web-services,servlets,jax-ws,java-ee-5,Java,Web Services,Servlets,Jax Ws,Java Ee 5,应用程序配置: 使用java的Web应用程序是创建带有注释的JAX-WS2.0Web服务的第一种方法 WebLogic 10.3 我的要求 我的要求是部署单个web服务实现类,但根据访问服务的URL更改逻辑 问题: 我假设这样做的一个好方法是在web.xml中部署不同的映射,并使用不同的参数初始化它们。有更好的办法吗 关闭访问web服务的URL的最佳方式是什么?我应该尝试在web.xml中使用初始化参数配置两个servlet映射(尝试过,但无法使其正常工作),还是应该在服务impl中解析UR

应用程序配置:

  • 使用java的Web应用程序是创建带有注释的JAX-WS2.0Web服务的第一种方法
  • WebLogic 10.3
我的要求

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

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

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

我尝试过的(但没有成功)

我已经尝试在web.xml的
元素中添加
。但是,无法访问web服务中的
ServletConfig
对象来检索参数。web服务没有标准的
Servlet
的所有功能(即使我实现了
Servlet
ServletContextListener
)。我只能访问
WebServiceContext
(似乎是这样),从那里我只能得到
元素——但我需要
元素

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

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

福
com.Foo
来源
1.
福
/福
酒吧
com.Foo
来源
2.
酒吧
/酒吧

您可能有,但是您是否尝试在运行时使用
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);
    }

}

我是从你那里得到这个主意的。但是,您没有尝试过。

您可能已经尝试过了,但是您是否尝试过在运行时使用
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);
    }

}

我是从你那里得到这个主意的。不过,我还没有尝试过。

这个解决方案或类似的解决方案似乎是唯一的解决方案。我会将此逻辑添加到一个Soap处理程序中,该处理程序在入站请求的链中执行(在该点设置消息中的参数)。谢谢你的想法。我希望这将是一个简单的配置,但它看起来将有更多的比这。这个解决方案,或一个类似的,似乎是唯一的解决方案。我会将此逻辑添加到一个Soap处理程序中,该处理程序在入站请求的链中执行(在该点设置消息中的参数)。谢谢你的想法。我希望这将是一个简单的配置,但它看起来将有更多的比这。