应用程序配置:
- Web 应用程序使用 java 第一种方法通过注释创建 JAX-WS 2.0 Web 服务。
- WebLogic 10.3
我的要求
我的要求是部署单个 Web 服务实现类,但根据访问服务的 URL 更改逻辑。
问题: 我假设一个好方法是在 web.xml 中部署不同的映射并使用不同的参数初始化它们。有更好的办法吗?
关闭访问 Web 服务的 URL 的逻辑的最佳方法是什么?我应该尝试使用初始化参数在 web.xml 中配置两个 servlet 映射(尝试过,但无法使其工作),还是应该解析服务实现中的 URL?还有其他选择吗?
我尝试过的方法(但没有成功)
我尝试添加 <init-param>
在 <servlet>
web.xml 中的元素。但是,无法访问ServletConfig
Web 服务内的对象来检索参数。 Web 服务不具备标准Servlet
的所有功能。 (即使我实现 Servlet
或 ServletContextListener
)。我只能访问WebServiceContext
(看来)从那里我只能得到 <context-param>
元素 - 但我需要 <init-param>
而是元素。
在 web.xml 中,我输入两个 <servlet>
元素使用相同的 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>
最佳答案
您很可能有,但是您是否尝试在运行时使用 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/ 。不过没试过。
关于java - 如何使用参数初始化 Java EE 5 JAX-WS 2.0 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621808/