带有 Cxf 和路由的骆驼
Camel With Cxf and Routing
我正在研究 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>
将其路由到实现中。但是由于实现 returns 一个响应对象我很困惑如何围绕它构建路由。
- 一旦调用进入实现,我该如何执行
其他路由并发回响应?在这种情况下,实现 returns 是一个自定义对象。
- 其他路由如何附加到 CXF 路由?
- 我的 CXF 实现应该总是 return void 类型吗?如我所见
也就是说,要访问 Exchange 对象 camel 需要 return 类型
无效
- 我是否完全忽略实施并继续 "to" 步骤
并修改它以换取所需的响应?
任何指点将不胜感激。
老兄,看看这个 - http://bushorn.com/camel-cxf-geocoder-example/
虽然上面的例子不是 REST,但是 CXF 和 Camel 路由的用法是一样的。
我将执行这些强制性步骤:
避免 beans/custom 类 - 尝试使用 camel 框架功能。
使用XML - Spring/Blueprint DSL
请看下面的帖子。
我已经使用 camel 和 Apache CXF 成功实现了 Web 服务消费。如果你有疑问,我可以帮助你。
谢谢,
高瑟姆
@GauthamHonnavara - 这是一个带有关联处理器的 JS web 服务的实现,但是它没有将任何直接路由关联到 endpoint.Also 我的问题是针对 JAX-RS 的,你不能在其中生成服务 class 来自 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>
技巧是使用服务 class 标签。如果那里提供了接口,那么它不需要 CXF 的具体实现。
希望这对您有所帮助。让我知道
我正在研究 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>
将其路由到实现中。但是由于实现 returns 一个响应对象我很困惑如何围绕它构建路由。
- 一旦调用进入实现,我该如何执行 其他路由并发回响应?在这种情况下,实现 returns 是一个自定义对象。
- 其他路由如何附加到 CXF 路由?
- 我的 CXF 实现应该总是 return void 类型吗?如我所见 也就是说,要访问 Exchange 对象 camel 需要 return 类型 无效
- 我是否完全忽略实施并继续 "to" 步骤 并修改它以换取所需的响应?
任何指点将不胜感激。
老兄,看看这个 - http://bushorn.com/camel-cxf-geocoder-example/
虽然上面的例子不是 REST,但是 CXF 和 Camel 路由的用法是一样的。
我将执行这些强制性步骤:
避免 beans/custom 类 - 尝试使用 camel 框架功能。
使用XML - Spring/Blueprint DSL
请看下面的帖子。
我已经使用 camel 和 Apache CXF 成功实现了 Web 服务消费。如果你有疑问,我可以帮助你。
谢谢, 高瑟姆
@GauthamHonnavara - 这是一个带有关联处理器的 JS web 服务的实现,但是它没有将任何直接路由关联到 endpoint.Also 我的问题是针对 JAX-RS 的,你不能在其中生成服务 class 来自 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>
技巧是使用服务 class 标签。如果那里提供了接口,那么它不需要 CXF 的具体实现。
希望这对您有所帮助。让我知道