2

我创建了一个简单的 EJB3 WebService ,它应该被 SOAPHandler 拦截。在构建过程中我没有收到任何错误\警告(我曾经得到类路径错误,它们都已修复),并且我能够部署和调用 WS ,但服务器完全忽略了 HandlerChain 部分,它永远不会受到打击. 我的代码是:
处理程序:

public   class SecuritySOAPHandler implements SOAPHandler<SOAPMessageContext> { ... }


豆子:

@Stateless
@WebService(
        portName = "ExampleWSPort",
        serviceName="ExampleWS"     
        )
@HandlerChain( file="handlerchain.xml")
public class ExampleWS {

    public ExampleWS()
    {

    }
    @WebMethod
 public String first(String input)
 {
     return input + " Got";
 }

处理程序链.xml:

    <?xml version="1.0" encoding="UTF-8"?>

<jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">
<!-- Note:  The '*" denotes a wildcard. -->

    <jws:handler-chain name="MyHandlerChain">
        <jws:protocol-bindings>##SOAP11_HTTP ##ANOTHER_BINDING</jws:protocol-bindings>
        <jws:port-name-pattern 
              xmlns:ns1="http://handlersample.samples.ibm.com/">ns1:MySampl*</jws:port-name-pattern>
        <jws:service-name-pattern 
              xmlns:ns1="http://handlersample.samples.ibm.com/">ns1:*</jws:service-name-pattern>
        <jws:handler>
            <jws:handler-class>com.soaphandlers.SecuritySOAPHandler</jws:handler-class>
        </jws:handler>

    </jws:handler-chain>

</jws:handler-chains>

任何帮助表示赞赏。谢谢

4

1 回答 1

1

我遇到了类似的问题,发现了以下问题:

  • 显然,绝对路径或类路径不能很好地工作,因此要么将 xml 放在与 ExampleWS 类相同的文件夹中,要么使用 ../,例如,在我的情况下,我是这样的:

    @HandlerChain(file="../../../../../../../META-INF/ws-handler-config.xml")

  • 来自示例的 jws: 命名空间也带来了问题,所以我把它简单化了:

    <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
    <handler-chain>
    <handler>
    <handler-class>util.interceptors.SOAPLoggingHandler</handler-class>
    </handler>
    </handler-chain>
    </handler-chains>

通过此更改,它可以工作!

于 2013-01-31T16:05:29.397 回答