当前位置: 首页 > 知识库问答 >
问题:

带Cxf和路由的Camel

谢旭
2023-03-14

我在做一些关于Camel-CXf集成的研究,对下面的场景感到困惑。

所以我实现了一个Restendpoint

@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 实现是否应该始终返回无效类型?如我所见,要访问 Exchange 对象骆驼,返回类型需要为 void
  4. 我是否完全忽略了实现并执行“to”步骤并对其进行修改以换取所需的响应?

任何指示将不胜感激。

共有3个答案

公孙驰
2023-03-14

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

假设这个用例,您需要一个客户调用endpoint,然后再执行 5 个步骤,联系另一个 Web 服务等,然后发送回响应。上面的实现在 Web 服务实现 Bean 本身中发送回响应。

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

<!-- 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 的具体实现。

希望这有帮助。让我知道

严正初
2023-03-14

请查看以下线程

Apache Camel和web服务

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

谢谢,高森

周涵畅
2023-03-14

伙计,看看这个 - http://bushorn.com/camel-cxf-geocoder-example/

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

我将执行以下强制性步骤:

>

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

    使用XML - Spring/Blueprint DSL

  •  类似资料:
    • 我一直试图使用2.12.1-snapshot中的RabbitMQComponent版本让camel进行路由。这样做,我可以很容易地消费,但在路由到另一个队列时会遇到ad问题。 在这篇文章中,我已经验证了指定的交换机是否配置了适当的路由密钥。我注意到,我能够大量消费,但不能生产到out.queue。 以下是对处理消息的RabbitMQProducer的唯一引用。 我花了很多时间研究了RabbitMQ

    • 我正在使用cxf作为带有WS-寻址的apache骆驼路由中的生产者。我知道可以通过(例如可能是错误的)在路由中设置SoapAction Header WS-Addressing操作字段是否也可以这样做?因为我注意到它发送的值错误。我需要输入两个WS-Addressing操作值,并在驼峰路线中决定使用哪一个。

    • 我对Java服务器端编程还不熟悉,我的问题基本上是使用Servlets(低级别,不使用spring mvc等)开始一个起点,然后从node开始构建。js后台,其中路由定义将以函数(,等),函数将在http方法之一(GET、post、PUT、DELETE)的参数中接收和。 如果有人可以帮助我,从一个servlet类中的路由(比如说)开始定义方法,这个servlet类映射到http方法,同时在其参数中

    • 我目前正在用spring cloud gateway替换网飞Zuul的api gateway。该设置对大多数路线使用发现客户端(eureka ),但是我们还有一个solr实例正在运行,它需要手动定义路线(因为solr不支持Eureka) 使用以下配置,使用到在本地主机上运行的solr的静态路由可以很好地工作: 但是,我想为这条路由使用负载平衡的uri,因为我们有多个solr实例。查看留档,我发现实

    • 问题内容: 是否可以将Navigator.popUntil与没有固定名称的路由一起使用? 我有一条通过以下方式创建的路线: 现在,当我在任何屏幕上收到推送通知并显示弹出消息时,其中一个按钮应指向上面列出的路线。该路线已创建,必须“弹出”。怎么做? 使用命名路由,可以这样完成: “关键”和所需路线的上下文均可用。但是,重新创建路由似乎不是一个好的解决方案,因为原始路由创建包含一些变量(somevar

    • 问题内容: 我有一个提供文件列表的应用程序。 应用程序必须响应以下路由: 这是没有指定路径的路由,例如目录。我在想类似的东西显然不起作用。 如何定义一个响应所有示例的路线? 问题答案: 使用(注意尾随星号)。 完整的例子