我有一个用JAX-WS开发的SOAP Web服务,如下所示:
@WebService(...)
public class SOAP_Service implements JAXWS_Interface {
public SOAP_Service() {
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
List<Handler> handlers = new ArrayList<Handler>();
handlers.add(new SOAPHandler<SOAPMessageContext>() {
// Read SOAP headers
});
factory.addHandlers(handlers);
}
@Override
public FooResponse foo(FooRequest req) {
// Do something.
}
}
SoapHandler是我用来读取传入SOAP请求信封(Add SOAP header object using pure JAX-WS)标头的最佳策略。我无法在foo
调用中找到使用标题数据的方法。
我还有一个使用RESTEasy开发的REST Web服务,如下所示:
@Path("")
@Produces(MediaType.APPLICATION_JSON)
public class REST_Service {
JAXWS_Service service = new JAXWS_Service();
JAXWS_Interface interface = service.getJAXWS_Interface();
public REST_Service() {
final List<Handler> handlerList = new ArrayList<Handler>();
handlerList.add(new SOAPHandler<SOAPMessageContext> {
// Inject SOAP headers
});
}
@GET
@PATH("/foo")
public FooResponse foo(
@HeaderParam("bar") String bar,
@QueryParam("fooParam1") String fooParam1)
{
FooRequest request = new FooRequest();
request.setFooParam1(fooParam1);
interface.foo(request);
}
}
我遇到的问题是将REST标头参数放入SOAP标头中。我想过两个解决方案,但我不喜欢
foo
中,创建JAXWS_SERVICE
,JAXWS_INTERFACE
的新实例,并将final bar
传递到内部SOAPHandler
。
foo
中,在SOAPHandler
的实现中设置一个变量,当调用handleMessage()
时,该变量将被注入到SOAP标头中。
我一直在思考,阅读和研究,我可以使用一些建议或更好地解决我的问题。