【问题标题】:Generic CXF server implementation通用 CXF 服务器实现
【发布时间】:2018-09-19 16:28:56
【问题描述】:

我目前正在使用 Spring Boot 和 CXF 进行项目。 我已经成功地为特定的 web 服务(带有相关的 WSDL)创建了一个 SOAP 客户端和一个 SOAP 服务器。像魅力一样工作。

现在我需要实现某种代理服务器,它只解释 SOAP-Header(安全、自定义标头)并根据自定义标头的内容将 SOAP-Service 路由到不同的后端。

但我还没有找到通用处理服务调用的选项。所有在线解决方案都建议我在代理中拥有不同代理服务的所有 WSDL,并生成一个内部 cxf-model。

有没有办法在没有 WSDL/内部模型的情况下实现这一点?还没找到解决办法。

我采用的一种方法是实现自定义 CXF 实施器并将其绑定到端点。

@Bean
public Endpoint endpoint()
{
        EndpointImpl endpoint = new EndpointImpl(springBus(), customImplementor);
        endpoint.publish("/proxy");

        return endpoint;
}

但是没有我可以扩展的实现接口。

我在这里想念什么吗? 你有什么建议?

【问题讨论】:

    标签: java spring cxf


    【解决方案1】:

    为什么不使用 cxf-camel 并创建代理服务,它可以根据您的基于标头参数的要求进行路由。 Here 是使用 spring-boot-cxf 和 spring-boot-camel 的代理服务的基本示例实现

    【讨论】:

      【解决方案2】:

      听起来如果您需要处理程序... 只需定义一个拦截器类,它们就会执行类似的操作。

      @Bean
      public Endpoint endpoint()
      {
          InterceptorClass handler = context.getBean(InterceptorClass.class);
          EndpointImpl endpoint = new EndpointImpl(springBus(), customImplementor);
          endpoint.setHandlers(Arrays.asList(handler));
          endpoint.publish("/proxy");
      
          return endpoint;
      }
      

      在这里查看Oracle Doc 的示例,了解如何创建拦截器类。

      【讨论】:

      • 您好,冬天,感谢您的回答。是的,拦截器方法对标题的解释是正确的。我们已经有能力处理它们了。问题是如何处理服务,因为需要 wsdl。代理应该能够在没有 wsdl 或内部服务模型的情况下处理服务请求(只需忽略请求正文)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 2012-07-24
      • 2011-07-14
      • 2020-01-21
      相关资源
      最近更新 更多