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

Camel CXF Junit测试因404而失败

栾鸣
2023-03-14

我试图对我的骆驼路由进行单元测试,在成功调用路由后,我从测试代码中获得了404,这意味着我无法从测试中读取响应,总是抛出没有找到404

这是我的测试代码

    final Exchange send = template.send("cxfrs://http://localhost:9001/v1/core/handshake", new Processor() {
        public void process(Exchange exchange) throws Exception {
            exchange.setPattern(ExchangePattern.OutOnly);
            Message inMessage = exchange.getIn();
            //  setupDestinationURL(inMessage);

            final String uuid = UUID.randomUUID().toString().replace("-", "");
            System.out.println("uuid = " + uuid);

            final GenerateTestHeaders headerGenerator = new GenerateTestHeaders();
            final Map<String, Object> outboundHeaderMap = headerGenerator.getOutboundHeaderMap(API_KEY, ACCESS_ID, PRIVATE_ACCESS_KEY, "utf-8", "POST", "2016-08-31T10:40:55.979-0400", uuid);

            // set a customer header
            inMessage.setHeaders(outboundHeaderMap);

            // using the http central client API
            inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.TRUE);

            inMessage.setHeader("HOST", "localhost:9001");

            // set the Http method
            inMessage.setHeader(Exchange.HTTP_METHOD, "POST");

            // set the operation name
            inMessage.setHeader(CxfConstants.OPERATION_NAME, "handshake");

            inMessage.setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");

            // set the relative path
            // inMessage.setHeader(Exchange.HTTP_PATH, "/IMP/v1/core/handshake");

            // Specify the response class , cxfrs will use InputStream as the response object type
            inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, HandshakeResponse.class);

            // since we use the Get method, so we don't need to set the message body
            inMessage.setBody(null);


        }
    });

我的路线定义如下

<cxf:rsServer id="coreEndPoint" address="http://localhost:9001/v1/core" staticSubresourceResolution="true"
              serviceClass="com.incomm.imp.neo.core.incoming.Framework"
              loggingFeatureEnabled="true" loggingSizeLimit="20">
    <cxf:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">
        </bean>
    </cxf:providers>
    <cxf:inInterceptors>
        <ref bean="loggingInInterceptor"></ref>
    </cxf:inInterceptors>
    <cxf:outInterceptors>

        <ref bean="loggingOutInterceptor"></ref>
    </cxf:outInterceptors>
     <cxf:features >
        <ref bean="swagger2Feature"></ref>
    </cxf:features>
</cxf:rsServer>

所以我的路由被调用,日志输入器记录了有效负载的200成功,但是当生产者模板返回时,它有404异常。

知道我做错了什么吗?

共有1个答案

经慈
2023-03-14

进一步调试后,金意识到这必须与Jetty服务器的内部处理方式有关。与骆驼和阿帕奇样本进行了交叉比较。对它进行了一些修改,并进行了一些调整,长话短说的主要区别在于POM

我想失败的原因是POM中的依赖关系。

 <!-- http client tests -->
 <dependency>
     <groupId>org.apache.camel</groupId>
     <artifactId>camel-http</artifactId>
     <scope>test</scope>
     <version>${camel-version}</version>
 </dependency>

 <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jetty</artifactId>
    <version>${camel-version}</version>
 <!--   use the same version as your Camel core version-->
</dependency>

 <!--  Test Dependencies -->
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-core-xml</artifactId>
    <scope>test</scope>
    <version>${camel-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-test</artifactId>
    <version>${camel-version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-test-spring</artifactId>
    <version>${camel-version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-ws-rm</artifactId>
    <version>${cxf-version}</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <scope>test</scope>
    <version>4.5.2</version>
</dependency>
<dependency>
    <groupId>org.easymock</groupId>
    <artifactId>easymockclassextension</artifactId>
    <scope>test</scope>
    <version>3.2</version>
</dependency>

我添加了这些,它就开始工作了。我得看看哪一个有魔力,现在我很好。

 类似资料:
  • 我在使用JUnit5进行maven测试时遇到了一个奇怪的问题。 我用junit工具为每个方法创建了测试套件,每个测试都是这样开始的。 和要测试的类

  • 在使用Oracle DB和JDK 17升级到Spring Boot 2.5.7时,我在Maven上运行测试时出现了这个奇怪的错误。 错误是:[ERROR]无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test(default-test)on project kkd: Exection default-test of目标org

  • 我有一个Spring批处理项目。目标是对Spring作业中的各个步骤执行集成测试。 我正在使用JobLauncherTestUtils来启动步骤。但是,当这个util启动步骤时,它会在一个单独的线程中运行它。一旦线程完成执行,应该会有一些值分配给。 问题:由于某些原因,即使在线程完成执行之前,测试也会转到下一行

  • 我最近才开始为我们的web应用程序创建Geb/Spock测试,并且--考虑到我对Geb、Spock和所有Groovy的知识有限--遇到了一个毫无意义的错误(考虑到我的Java经验)。 因此,下面是有问题的模块: 那里没什么特别的。 以下是这一页(不过,我不确定这是如何结合在一起的): 根据Erdi的回答,BugSpec的超类也包括在内:

  • 我花了几个小时来找出为什么我的一个junit测试在本地运行,而不是在github工作流上运行。失败的测试检查一些文件是否存在,以执行一些配置工作。我正在使用maven资源插件将这些文件复制到目标目录中的一个文件夹中。这是我的pom插件设置。xml: 文件按预期复制,mvn clean test按预期运行,但不在github工作流中运行。 这是我的工作流定义: 我想这是一个典型的RTFM问题,但我没

  • 我们正在使用Powermockito和Mockito来模拟一些静态类。似乎每次都会抛出。 你能帮我找出问题出在哪里吗? 测试中的Java类 使用Powermock runner进行Junit测试 进程已完成,退出代码为255 注: 实际底层elasticsearch类的源代码可以在这里找到 https://github.com/elastic/elasticsearch/blob/master/c