如何为JAX-WS Web服务处理程序提供参数?

时间:2015-01-29 08:46:51

标签: java web-services soap jax-ws handler

十年前,我用Weblogic 8.1(J2EE 1.4)和JAX-RPC创建了几个应用程序,主要包含Web服务。由于我可以使用这样的XML文件定义Web服务处理程序,因此将这些Web服务的Eeach调用记录在数据库中:

<?xml version="1.0" encoding="UTF-8"?>
<hc:wlw-handler-config xmlns:hc="http://www.bea.com/2003/03/wlw/handler/config/">
    <hc:handler-chain name="HistHandler">
        <hc:handler handler-name="HistLogger" handler-class="class implementing  the handler">
            <hc:init-param>
                <hc:description>description of the parameter</hc:description>
                <hc:param-name>name of the parameter</hc:param-name>
                <hc:param-value>value of the parameter</hc:param-value>
            </hc:init-param>
        </hc:handler>
    </hc:handler-chain>
</hc:wlw-handler-config>

正如您所看到的,可以为JaxRpc Handler提供一个参数,并且我使用此功能来提供Web服务所属的应用程序的名称,以便此应用程序名称可以存储在数据库中肥皂要求。

我今天必须实现同样的目标,但技术已发生变化。我现在必须使用J2EE 1.6(Tomee ++ 1.6.0.1),而JAX-WS已经取代了JAX-RPC。 我仍然可以使用XML文件指定Web服务处理程序,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
    <handler-chain>
        <handler>
            <handler-name>Name of the handler</handler-name>
            <handler-class>class implementing the handler</handler-class>
        </handler>
    </handler-chain>
</handler-chains>

正如您所看到的,似乎没有更多可能为处理程序提供参数。

所以我的问题是:该功能真的消失了吗?真的没有办法为处理程序类提供参数吗?

1 个答案:

答案 0 :(得分:3)

你是对的,<init-param>已从JAX-WS中的配置选项中拉出来。 From the JSR-109 specification

  

部署描述符中的元素init-params不再存在   用于基于JAX-WS的容器。如果需要,开发人员应该使用   在中声明的环境入口元素()   用于此目的的应用程序组件的部署描述符。这些   可以使用@Resource注释或者注入到处理程序中   查找使用JNDI。

这对您来说意味着您要将init参数定义为vanilla JNDI条目,并将其作为@Resources viz

注入到处理程序中
  • 在web.xml中:

    <env-entry>
        <description>Description</description>
        <env-entry-name>PROPERTY_NAME</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>property_value</env-entry-value>
    </env-entry>
    
  • 在你的处理程序中

    @Resource String PROPERTY_NAME;