gpt4 book ai didi

java - JAX-WS RI : Best way to implement a Method Interceptor

转载 作者:行者123 更新时间:2023-12-01 05:44:10 27 4
gpt4 key购买 nike

我想为我的 Web 服务调用提供自己的方法拦截器。基本上,这个方法拦截器应该在调用真正的方法之前调用...请参阅下面的代码片段:

public class MyMethodInterceptor {
public Object invoke(Object t, Method m, Object[] args) throws Throwable {
// do some magic, such as tracing, authorise, etc...
return m.invoke(t, args);
}
}

// ....

public class MyWebServiceImpl implements MyWebServiceInterface {
public String greet(final String name) {
return "Hi there, " + name;
}
}

这个想法是,每次调用 Web 服务时,它将通过我的拦截器进行调度。我考虑过连接我自己的 InstanceResolver,但它已经失控了。我知道如何在 CXF 和 JAX-RS (Jersey) + Guice 中执行此操作。

JAX-WS 提供处理程序链,但是这些处理程序被调用太早(即,在方法调用之前很久),所以我没有所需的此时的信息。

使用 JAX-WS 的 Referene 实现来实现此目的的最佳方法是什么?

最佳答案

在 jax-ws 处理程序中,您就在真正的事情之前,您可以访问整个 SOAP 消息的内容,您需要什么但尚不可用?

编辑:
在处理程序中使用的一些示例:

public String getMessage(SOAPMessageContext smc) {
SOAPMessage message = smc.getMessage();
ByteArrayOutputStream soapEnvelope = new ByteArrayOutputStream();
message.writeTo(soapEnvelope);
soapEnvelope.close();
return new String(soapEnvelope.toByteArray());
}

public String getMethod(SOAPMessageContext smc) {
SOAPMessage message = smc.getMessage();
SOAPBody body = message.getSOAPBody();
return body.getFirstChild().getLocalName();
}

关于java - JAX-WS RI : Best way to implement a Method Interceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6343108/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com