【问题标题】:Camel With Cxf and Routing带 Cxf 和路由的骆驼
【发布时间】:2016-06-27 19:03:06
【问题描述】:

我正在对 Camel - CXf 集成进行一些研究,但对以下场景感到困惑。

所以我实现了一个 Rest Endpoint

@Path("/authenticate")
public interface Sample {
@GET
@Path("/handshake")
@Produces(MediaType.TEXT_PLAIN)
public Response handshake();

@POST
@Path("/login")
@Consumes({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
@Produces(MediaType.APPLICATION_JSON)
public Response login(LoginRequest request) throws JsonGenerationException, JsonMappingException, IOException;
}

实现如下

public class SampleImpl implements Sample{

@Context
private HttpHeaders headers;

@Autowired
CamelContext context;

public Response handshake()
{
    System.out.println("HandShake Executed Successfully");
    return Response.status(Status.OK).entity("This is a Message after Routing").build();
}

public Response login(LoginRequest request) throws JsonGenerationException, JsonMappingException, IOException {
    System.out.println("The Rquest objecr is Received "+request);
    return Response.status(Status.OK).entity(mapper.writeValueAsString(request)).build();
}

}

路线

<camel:from uri="cxfrs:bean:SampleRestEndPoint?bindingStyle=SimpleConsumer"></camel:from>

将其路由到实现中。但是由于实现返回一个响应对象,我很困惑如何围绕这个构建路由。

  1. 一旦调用进入实现,我该如何执行 其他路由并返回响应?在这种情况下,实现返回一个自定义对象。
  2. 其他路由如何附加到 CXF 路由?。
  3. 我的 CXF 实现是否应该始终返回 void 类型?如我所见 也就是说,要访问 Exchange 对象骆驼需要返回类型 作废
  4. 我是否完全忽略了实现并执行“to”步骤 并修改它以交换正文以获得所需的响应?。

任何指针将不胜感激。

【问题讨论】:

    标签: java routes apache-camel cxf


    【解决方案1】:

    老兄,看看这个 - http://bushorn.com/camel-cxf-geocoder-example/

    虽然上面的例子不是 REST,但是 CXF 和 Camel 路由的用法是一样的。

    我将执行这些强制性步骤:

    1. 避免 bean/自定义类 - 尝试使用骆驼框架功能。

    2. 使用 XML - Spring/Blueprint DSL

    【讨论】:

    • 感谢您的回复,但这不是我想要的。我想要一个实现 CSF Web 服务并充当端点的示例,触发端点应该通过路由并返回响应。看起来像一个直接的测试用例,但找不到示例或解决上述问题。
    【解决方案2】:

    请看下面的帖子。

    Apache Camel and web services

    我已经使用camel和Apache CXF成功实现了Web服务消费。如果您有疑问,我可以帮助您。

    谢谢, 高瑟姆

    【讨论】:

      【解决方案3】:

      @GauthamHonnavara - 这是一个带有关联处理器的 JS Web 服务的实现,但它不会关联到端点的任何直接路由。我的问题也特定于 JAX-RS,您无法从 wsdl 生成服务类。

      假设这个用例您需要客户调用端点,然后再经历 5 个步骤,联系另一个 Web 服务等,然后发回响应。上述实现在 web 服务实现 bean 本身中发送回响应。

      因此,为避免这种情况,请与生产者消费者等创建一个简单的接口,就像在我的问题中一样,然后如果您想注入 Exchange(如果需要。)并使用以下配置,则使每个方法无效

      <!-- Created the CXF End Point For the  Calls to Come IN -->
      <cxf:rsServer id="RestEndPoint" address="/rest"
          serviceClass="com.poc.camel.cxf.service.incoming.xxx"
          loggingFeatureEnabled="true" loggingSizeLimit="20">
          <cxf:providers>
              <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" >
                  <!-- <constructor-arg ref="customObjectMapper" type="org.codehaus.jackson.map.ObjectMapper"/> -->
              </bean>
          </cxf:providers>
      </cxf:rsServer>
      

      技巧是使用服务类标签。如果那里提供了接口,则不需要 CXF 的具体实现。

      希望这会有所帮助。告诉我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        • 2016-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多