java - Camel-Castor 在解码和编码时出错,它也没有使用映射文件

标签 java apache-camel unmarshalling fuseesb castor

我在解码然后编码时遇到问题。

我的输入:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GetDeadlineOffset>
    <deadlineCode>DC1</deadlineCode>
    <parameters>
      <parameter name="P1">Param 1</parameter>
      <parameter name="P2">Param 2</parameter>
    </parameters>
</GetDeadlineOffset>

我的映射:

<?xml version="1.0" encoding="UTF-8"?>
<class name="com.evolvus.training.camel.domain.GetDeadlineOffset">
    <map-to xml="GetDeadlineOffset"/>
    <field name="DeadlineCode">
        <bind-xml name="deadlineCode" />
    </field>
    <field name="parameters" type="com.evolvus.training.camel.domain.Parameter" collection="collection">
        <bind-xml name="parameter" location="parameters">
            <class name="com.evolvus.training.camel.domain.Parameter">
                <field name="Name">
                    <bind-xml name="name" node="attribute" />
                </field>
                <field name="Value">
                    <bind-xml node="text"/>
                </field>
            </class>
        </bind-xml>
    </field>        
</class>

我的类(class): 参数.java

public class Parameter {
   private String name = null;
   private String value = null;
  //setters and getters
}

GetDeadlineOffset.java

public class GetDeadlineOffset {
   private String deadlineCode = null;
   private Vector<Parameter> paramList = new Vector<Parameter>();
   //setters and getters
}

ISO3166Processor.java

public class ISO3166Processor implements Processor {
   public void process(Exchange arg0) throws Exception {
      GetDeadlineOffset iso4217 = (GetDeadlineOffset) arg0.getIn().getBody();
      System.out.println("Unmarshalled Object is: " + iso4217);
      arg0.setOut(arg0.getIn());
      arg0.getOut().setBody(gdo);
      arg0.getOut().setHeaders(arg0.getIn().getHeaders());
   }
}

路线:

<bean id="currencyProcessor" class="com.evolvus.training.camel.processor.ISO3166Processor" />
<camelContext xmlns="http://camel.apache.org/schema/spring">

   <dataFormats>
      <castor id="iso3166" 
         mappingFile="castor/castor-mapping.xml"
         packages="com.evolvus.training.camel.domain"/>
   </dataFormats>

   <route>
      <from uri="file:src/data/in?noop=true"/>
      <unmarshal ref="iso3166"/>   
      <log message="unmarshall" />
      <process ref="currencyProcessor" /> 
      <log message="processed" />
      <marshal ref="iso3166" />
      <log message="reachng output2" />
      <to uri="file:src/data/out?fileName=${id}" />
      <stop></stop>
   </route>
</camelContext>

异常:

Exhausted after delivery attempt: 1 caught:
java.lang.NullPointerException java.lang.NullPointerException
at org.exolab.castor.mapping.Mapping.loadMapping(Mapping.java:276)
[org.apache.servi‌​cemix.bundles.castor-1.3.1_2.jar:] –

The class for the root element 'GetDeadlineOffset' could not be found.
File: [not available]; line: 2; column: 20}
at org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unmarsh‌​aller.java:794)
[org.apache.servicemix.bundles.castor-1.3.1_2.jar:] 

如果我编码它说考虑切换到使用 Marshaller 实例并调用 marshal() 方法之一*。也请给我解决方案。如何使用camel调用marshall的非静态方法?

最佳答案

这个异常(exception):

java.lang.NullPointerException java.lang.NullPointerException
at org.exolab.castor.mapping.Mapping.loadMapping(Mapping.java:276)
[org.apache.servi‌​cemix.bundles.castor-1.3.1_2.jar:] –

表示castor找不到你的mapping.xml。确保它包含在您的 jar 文件/类目录中。

关于java - Camel-Castor 在解码和编码时出错,它也没有使用映射文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23608727/

相关文章:

java - Apache Camel 邮件: sending over smtps not working

xml - Jaxb:Unmarshaller 找不到具有命名空间和前缀的元素

java - Scala 和 Java BigDecimal

java - Jenkins - 通过一项工作向 Sonar 构建所有子模块报告

java - java中Thread.yield、sleep和wait方法中打开的资源会发生什么情况

java - 如何使用 JAXB 保留 XML 注释?

go - 自定义 UnmarshalYAML,如何在自定义类型上实现 Unmarshaler 接口(interface)

java - 将提示文本的样式与 JFXTextField 中的文本分开

apache-camel - Camel SQL - 在 Spring Boot 中将 DataSource 放入 SimpleRegistry

apache-camel - 如何将文件移动到错误目录并使用 apache camel 回滚其他移动?