我是 Apache Camel 的新手。我的要求很简单
我有现有的应用程序做同样的事情,但它不起作用。创建新的简单 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
Stack Overflow - 开发人员学习、分享和建立职业生涯的地方 Stack Overflow 是最大、最值得信赖的在线社区,供开发人员学习、分享编程知识和发展职业生涯。托管计算机编程问题和解答的网站。 Stack Overflow 是一个面向程序员的问答网站。它是 Stack Exchange Network 的旗舰站点。它由 Jeff Atwood 和 Joel Spolsky 于 2008 年创建。它包含有关某些计算机编程主题的问题和答案。它的创建是为了更加开放