REST到SOAP标头

时间:2013-10-02 13:51:28

标签: java web-services rest soap

我有一个用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标头中。我想过两个解决方案,但我不喜欢

  1. foo中,创建JAXWS_SERVICEJAXWS_INTERFACE的新实例,并将final bar传递到内部SOAPHandler
    • 我不喜欢这个,因为它需要在每个请求中重新创建我们的SOAP服务+处理程序,我认为这是非常低效的。

  2. foo中,在SOAPHandler的实现中设置一个变量,当调用handleMessage()时,该变量将被注入到SOAP标头中。
    • 我实际上认为由于缺乏同步而无法正常工作。
  3. 我一直在思考,阅读和研究,我可以使用一些建议或更好地解决我的问题。

0 个答案:

没有答案