首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我用camel servlet创建的REST不公开呢?

为什么我用camel servlet创建的REST不公开呢?
EN

Stack Overflow用户
提问于 2022-03-25 11:50:22
回答 1查看 290关注 0票数 1

目前,我正在努力使用Apache在我的项目中公开REST。当我运行该项目时,它在控制台中似乎很好,但它只是不起作用:

curl http://127.0.0.1:8080/materials curl:(7)未能连接到127.0.0.1端口8080:连接被拒绝

下面是pom.xml文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Packages</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jackson</artifactId>
        <version>3.12.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jdbc</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jsonpath</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.17.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId >
        <version>2.17.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>5.16.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-camel</artifactId>
        <version>5.16.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jaxb</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jaxb-starter</artifactId>
        <version>2.25.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jms</artifactId>
        <version>3.15.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-broker</artifactId>
        <version>5.16.4</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.4.0-b180830.0359</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-xml-provider</artifactId>
        <version>2.13.2</version>
    </dependency>
    <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>1.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-rest</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-servlet</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-servlet-starter</artifactId>
        <version>3.0.0-RC3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jackson-starter</artifactId>
        <version>3.0.0-RC3</version>
    </dependency>
</dependencies>
</project>

下面是我写的代码:

代码语言:javascript
复制
package com.release11.output;

import com.release11.xjc.materials.ObjectFactory;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.converter.jaxb.JaxbDataFormat;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.model.rest.RestBindingMode;
import javax.jms.Connection;
import javax.xml.bind.JAXBContext;


public class OutputAdapter1 {

public static void main(String[] args) throws Exception{

    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

    Connection connection = connectionFactory.createConnection();
    connection.start();

    CamelContext context = new DefaultCamelContext();
    context.addComponent("activemq", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));

    context.addRoutes(new RouteBuilder() {
        @Override
        public void configure() throws Exception {
        JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
        JaxbDataFormat xmlDataFormat = new JaxbDataFormat(jaxbContext);
            xmlDataFormat.setIgnoreJAXBElement(false);

        restConfiguration()
                    .component("servlet")
                    .host("localhost")
                    .port("8080")
                    .bindingMode(RestBindingMode.auto);

        from("activemq:topic:MATERIALS_ENRICHED")
                    .unmarshal(xmlDataFormat)
                    .filter(simple("${body.type} in 'A1,A2,A3'"))
                .to("direct:materials");

        rest("/materials")
                    .get().route()
                    .to("direct:materials");
        }
    });
    context.start();
}
}

我不确定将构建输出放在这里,因为它很长,所以我只在这些路径开始的地方放置一个片段:

12:47:22.591主调试容器-目标上启动侦听器容器org.apache.camel.component.jms.DefaultJmsMessageListenerContainer@52045dbe 12:47:22.591主要调试org.apache.camel.impl.engine.InternalRouteStartupManager -路由: route1启动和消费来源:activemq://主题:MATERIALS_ org.apache.camel.component.jms.JmsConsumer 12:47:22.593主调试org.apache.camel.impl.engine.InternalRouteStartupManager -路由: route2 >>> Routerest://get:/materials?consumerComponentName=servlet&routeId=route2 -> null12:47:22.593主要调试org.apache.camel.impl.engine.InternalRouteStartupManager -在路由上启动使用者(顺序: 1001):route2 12:47:22.593主要调试org.apache.camel.support.DefaultConsumer -构建使用者: Consumerservlet:/materials?httpMethodRestrict=GET 12:47:22.593主要调试org.apache.camel.support.DefaultConsumer - Init使用者: Consumerservlet:/materials?httpMethodRestrict=GET 12:47:22.593主调试org.apache.camel.support.DefaultConsumer -启动消费者: Consumerservlet:/materials?httpMethodRestrict=GET 12:47: 47:22.595主要调试org.apache.camel.http.common.DefaultHttpRegistry -注册路径/materials提供者的使用者当前:0 12:47:22.595主要调试信息org.apache.camel.impl.engine.AbstractCamelContext -路由: route2启动和消费从:servlet:/材料12:47:22.597主要信息org.apache.camel.impl.engine.AbstractCamelContext -路由启动摘要(总计:2开始:2) 12:47:22.597主要信息org.apache.camel.impl.engine.AbstractCamelContext-已启动route1 (activemq://主题: org.apache.camel.impl.engine.AbstractCamelContext : 12:47:22.597主要信息route2 -启动route2(rest://get:/route2) 12:47:22.597主要信息route2- Apache 3.12.0 (骆驼-1)开始于525 47(构建:81 47启动:148 47) 12:47:22.610主要调试org.apache.camel.impl.DefaultCamelContext -org.apache.camel.impl.DefaultCamelContext()采取了457 millis

请告知我的意见,我是否可以把完整的构建输出,以便我将编辑的票证。请帮帮我。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-25 16:25:41

组件camel-servlet不意味着要在独立模式下使用,就像您试图做的那样。它用于在Servlet容器或application上部署Camel应用程序时使用。

在独立模式下,如果您想公开rest端点,应该使用像camel-undertowcamel-jettycamel-netty-httpcamel-platform-http这样的组件(您可以找到完整的列表这里)。

假设您想要使用undertow,那么您必须遵循下面的步骤

在pom文件中,需要将camel-rest替换为camel-undertow,如下所示:

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-undertow</artifactId>
    <version>3.12.0</version>
</dependency>

然后,只需将rest配置更改为使用undertow,这应该是很好的:

代码语言:javascript
复制
restConfiguration()
    .component("undertow")
    .port(8080)
    .bindingMode(RestBindingMode.auto);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71616527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档