Apache Camel + Spring boot 异常数据格式“jaxb”无法创建

问题描述 投票:0回答:1

我是 Apache Camel 的新手。我的要求很简单

  1. 程序应该读取 XML
  2. 屏蔽我想要的字段
  3. 生成屏蔽 XML

我有现有的应用程序做同样的事情,但它不起作用。创建新的简单 Spring Boot 项目如下。要求仅使用 Apache Camel。

com.example.demo包和sample.xml中的所有以下类都存在于资源中

public class ApacheCamelDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApacheCamelDemoApplication.class, args);
    }

}
@Component
public class MyRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("file:src/main/resources?fileName=sample.xml&noop=true").unmarshal().jaxb("com.example.demo")
                .bean(new XmlMaskingBean()).marshal().jaxb("com.example.demo").to("mock:output");

    }
}
@Component
public class XmlMaskingBean {

    public void maskSensitiveData(MyXmlObject xmlObject) {
        xmlObject.setCreditCardNumber("XXXX-XXXX-XXXX-" + xmlObject.getCreditCardNumber().substring(15));
    }
}
@Component
@XmlRootElement(name = "data")
public class MyXmlObject {
    private String name;
    private String creditCardNumber;
}
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.5</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>apache-camel-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>apache-camel-demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>4.5.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

我遇到以下错误

Caused by: java.lang.IllegalArgumentException: Data format 'jaxb' could not be created. Ensure that the data format is valid and the associated Camel component is present on the classpath
    at org.apache.camel.reifier.dataformat.DataFormatReifier.createDataFormat(DataFormatReifier.java:282) ~[camel-core-reifier-4.5.0.jar:4.5.0]
    at org.apache.camel.reifier.dataformat.DataFormatReifier.getDataFormat(DataFormatReifier.java:153) ~[camel-core-reifier-4.5.0.jar:4.5.0]
    at org.apache.camel.reifier.dataformat.DataFormatReifier.getDataFormat(DataFormatReifier.java:113) ~[camel-core-reifier-4.5.0.jar:4.5.0]
    at org.apache.camel.reifier.UnmarshalReifier.createProcessor(UnmarshalReifier.java:35) ~[camel-core-reifier-4.5.0.jar:4.5.0]
    at org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:879) ~[camel-core-reifier-4.5.0.jar:4.5.0]
    at org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:619) ~[camel-core-reifier-4.5.0.jar:4.5.0]
    at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:224) ~[camel-core-reifier-4.5.0.jar:4.5.0]
    ... 30 common frames omitted

如果我添加以下依赖项

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jaxb</artifactId>
    <version>4.5.0</version>
</dependency>

出现以下错误

Caused by: jakarta.xml.bind.JAXBException: "com.example.demo" doesnt contain ObjectFactory.class or jaxb.index
    at org.glassfish.jaxb.runtime.v2.ContextFactory.createContext(ContextFactory.java:241) ~[jaxb-impl-4.0.5.jar:4.0.5 - cb19596]
    at org.glassfish.jaxb.runtime.v2.JAXBContextFactory.createContext(JAXBContextFactory.java:58) ~[jaxb-impl-4.0.5.jar:4.0.5 - cb19596]
    at jakarta.xml.bind.ContextFinder.find(ContextFinder.java:322) ~[jakarta.xml.bind-api-4.0.2.jar:4.0.2]
    at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:392) ~[jakarta.xml.bind-api-4.0.2.jar:4.0.2]
    at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:349) ~[jakarta.xml.bind-api-4.0.2.jar:4.0.2]
    at org.apache.camel.converter.jaxb.JaxbDataFormat.createContext(JaxbDataFormat.java:570) ~[camel-jaxb-4.5.0.jar:4.5.0]
    at org.apache.camel.converter.jaxb.JaxbDataFormat.doStart(JaxbDataFormat.java:534) ~[camel-jaxb-4.5.0.jar:4.5.0]
    at org.apache.camel.support.service.BaseService.start(BaseService.java:113) ~[camel-api-4.5.0.jar:4.5.0]
    ... 60 common frames omitted
spring spring-boot apache-camel jaxb
1个回答
0
投票

在此输入图片描述

Stack Overflow - 开发人员学习、分享和建立职业生涯的地方 Stack Overflow 是最大、最值得信赖的在线社区,供开发人员学习、分享编程知识和发展职业生涯。托管计算机编程问题和解答的网站。 Stack Overflow 是一个面向程序员的问答网站。它是 Stack Exchange Network 的旗舰站点。它由 Jeff Atwood 和 Joel Spolsky 于 2008 年创建。它包含有关某些计算机编程主题的问题和答案。它的创建是为了更加开放

© www.soinside.com 2019 - 2024. All rights reserved.