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

Camel REST DSL与Restlet Servlet一起工作吗?

尉迟明辉
2023-03-14
<!-- Restlet Servlet -->
<servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
  <init-param>
    <param-name>org.restlet.component</param-name>
    <param-value>RestletComponent</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/rs/*</url-pattern>
</servlet-mapping>
<bean id="RestletComponent" class="org.restlet.Component" />

<bean id="RestletComponentService" class="org.apache.camel.component.restlet.RestletComponent">
  <constructor-arg index="0">
    <ref bean="RestletComponent" />
  </constructor-arg>
</bean>

这不适用于REST DSL。

我正在用这条简单的路由来测试它:

<rest>
    <get uri="/hello">
        <to uri="direct:hello"/>
    </get>
</rest>
<route id="hello">
    <from uri="direct:hello"/>
    <setBody><constant>Dolly</constant></setBody>
</route>

REST DSL成功地找到了在web.xml中定义的RestletComponent Bean,但该Bean没有与之关联的camelContext,因此当代码试图访问上下文时,我会得到一个空指针异常。

基本上,我开始怀疑REST DSL与servlet容器中的Restlet不兼容。我希望托管servlet容器处理传入的请求,而不希望为我的骆驼上下文生成一个单独的restlet服务器进程(在一个新的端口上)。

我运气不好吗?

下面是xml-dsl.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">

<import resource="common.xml" />

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <rest>
        <post uri="/persons">
            <route>
                <setBody>
                    <simple>insert into person(firstName, lastName) values('${header.firstName}','${header.lastName}')
                    </simple>
                </setBody>
                <to uri="jdbc:dataSource"/>

                <setBody>
                    <!--<simple>select * from person ORDER BY id desc OFFSET 1 ROWS</simple>-->
                    <simple>select * from person where id in (select max(id) from person)</simple>
                </setBody>
                <to uri="jdbc:dataSource"/>
            </route>
        </post>
        <get uri="/persons/{personId}">
            <route>
                <setBody>
                    <simple>select * from person where id = ${header.personId}</simple>
                </setBody>
                <to uri="jdbc:dataSource"/>
            </route>
        </get>
        <get uri="/persons">
            <route>
                <setBody>
                    <constant>select * from person</constant>
                </setBody>
                <to uri="jdbc:dataSource"/>
            </route>
        </get>
    </rest>

</camelContext>
</beans>

这不起作用。它抛出java.net.SocketException:权限被拒绝

共有1个答案

卞成荫
2023-03-14

我以前没有使用过Rest DSL,但是根据文档,您可以明确地让Camel知道您正在使用Rest组件:

<restConfiguration component="RestletComponent" port="9091"> <componentProperty key="foo" value="123"/> </restConfiguration>

它确实说,如果没有指定这一点,它将查找以检查是否有任何组件与DSL集成,但我猜,但这是值得尝试的。

另外,我发现spring beans ID以大写开头有点奇怪。

 类似资料:
  • 我想知道我是否能做这样的事情。假设我有一个数字流1-20。我想利用一个特性,比如drop 3(我想用Java术语来说是限制还是跳过?)并产生一个流,即数字流: 1-20、4-20、7-20等 然后可能平坦地将这些全部映射到一条溪流中。我尝试了使用Stream.iterate的各种组合,主要是从流生成流,但我一直收到一个IllegalStateExcema,说流已经操作或关闭。 例如,人们可能期望这

  • 我正在用Spring Boot和MongoDB开发一个web应用程序。我想让服务与@transactional spring注释一起工作,但我不知道这是否真的有效。(我以前没有与mongoDB合作过)。 我添加了注释,看起来一切都正常运行(应用程序运行,我可以执行CRUD的所有操作),但是,我不知道Spring是否忽略了注释,它是否正常工作,或者是否真的在考虑事务性。 在另一篇文章中,我看到我应该

  • 我搜索了一下,我觉得这是可能的。但当我这样尝试的时候: JMockit能与Scala一起工作吗?如果可以的话,我做错了什么?

  • 因此,如果我不能重写字符串作为它的最终结果(因此阻止我重写它的compareTo()方法来调用compareToIgnoreCase()),那么还有其他方法可以实现吗? 任何帮助都是非常感谢的。

  • 我已经成功地在我的Windows机器上安装了gnuradio,并尝试将随附的python环境(Python 2.7)与PyCharm v2018集成。我创建了一个新项目,并为包添加了一个用户定义的路径,以指向所有gnuradio库的位置(C:\Program Files\GNURadio-3.7\lib\site-包)。 在Pycharm可以毫无怨言地看到所有gnuradio包的意义上,一切似乎都

  • 在我的Laravel应用程序中,我需要定期使用Guzzle将数据发送到API。 API使用承载令牌进行身份验证,并请求和接受原始JSON。为了进行测试,我使用Postman访问了API,一切都工作得很好。

  • 我是不是漏掉了什么?我很确定编码sshPrivateKey字节[]是一种方法(如果我不这样做,JSCH会抱怨错误的密钥),但我不确定我还缺少什么?

  • http://jbossas.jboss.org/downloads 我发现一些文章提到Jboss AS 7不能与JDK8一起工作,但我的同事是PC是用JDK8启动的。我想应该有另一种方法来解决。 更新 经过尝试,我发现Jboss EAP7.0或Jboss AS 7.0.0 Final可以用JDK8执行,我将降级到我需要的版本。