2013-08-23 46 views
1

我使用jdk 1.6并开发了一个程序,它可以生成xml消息,其工作正常,我能够生成它。当我在unix服务器上部署它时,我得到了jaxb.bind。 marshaller例外,在unix中他们使用jdk 1.5。在我的xmlgenerated类中,这些包引用了JRE中的rt.jar,其中所需的包在unix服务器中的jdk 1.5中不可用。有什么可以帮助我们如何实现这个问题。在Unix服务器部署Jaxb异常

例外情况是:java.lang.NoClassDefFoundError:的javax/XML /结合/的Marshaller

的代码是:

`

public JaxbXmlMessageGenerator() { 
    try { 
     jaxbContext = JAXBContext.newInstance("generated"); 
     xmlOutputFactory = XMLOutputFactory.newFactory(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

public static void main(String[] args) { 
    JaxbXmlMessageGenerator jaxbXmlMessageGenerator = new JaxbXmlMessageGenerator(); 
    System.out.println("-- The Transformed XML Message -- \n"+jaxbXmlMessageGenerator.getMessage()); 
} 

public final String getMessage() { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    try { 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
     jaxbMarshaller.setProperty("jaxb.encoding", "UTF-8"); 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 

     XMLStreamWriter xmlStreamWriter = xmlOutputFactory 
       .createXMLStreamWriter(baos, (String) jaxbMarshaller 
         .getProperty(Marshaller.JAXB_ENCODING)); 
     xmlStreamWriter.writeStartDocument((String) jaxbMarshaller 
       .getProperty(Marshaller.JAXB_ENCODING), "1.0"); 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     File file=new File("D:\\eclipse\\file.xml"); 
     ObjectFactory factory = new ObjectFactory(); 
     BaNCSLimitRQPT rqpt = factory.createBaNCSLimitRQPT(); 
     MsgDtlT msgDtlT = factory.createMsgDtlT(); 
     msgDtlT.setMsgLimitType("FC"); 
     msgDtlT.setMsgOUID("0507"); 
     msgDtlT.setMsgTxnCur("USD"); 
     msgDtlT.setMsgUnBlckInd("2"); 
     msgDtlT.setMsgBlckExpiryDays("2"); 
     msgDtlT.setMsgBlckExpiryDayType("1"); 
     msgDtlT.setMsgTenor("180"); 
     msgDtlT.setMsgLimitId("1234"); 

     rqpt.setMsgDtl(msgDtlT); 

     JAXBElement<BaNCSLimitRQPT> element = factory 
       .createBaNCSLimitRQP(rqpt);   
     jaxbMarshaller.marshal(element, file); 
     jaxbMarshaller.marshal(element, System.out);    
     xmlStreamWriter.writeEndDocument(); 
     xmlStreamWriter.close();    
    } catch (Exception e) { 
     e.printStackTrace(); 
    }  
    return new String(baos.toByteArray()); 
} } 

`

问候, Ravindar

+0

所以你遇到麻烦运行jdk 1.5?我不认为JAXB捆绑到1.6之前,所以如果你想支持1.5,你必须下载一个实现并将其包含在你的应用程序中。 – DannyMo

+0

谢谢丹尼,你说得对... –

回答

1

我在JAXB中遇到了问题在jdk 1.5中实施。 Jaxb在unix服务器中部署异常

我已经在maven项目中获得了如下所示的结果。

<plugin> 
          <groupId>org.jvnet.jaxb2.maven2</groupId> 
          <artifactId>maven-jaxb2-plugin</artifactId> 
          <version>0.8.1</version> 
          <dependencies> 
            <dependency> 
              <groupId>javax.xml.bind</groupId> 
              <artifactId>jaxb-api</artifactId> 
              <version>2.1</version> 
            </dependency> 
          </dependencies> 
          <executions> 
            <execution> 
              <id>xsd-generate</id> 
              <goals> 
                <goal>generate</goal> 
              </goals> 
              <configuration> 
                <generateDirectory>src/main/java</generateDirectory> 
                <generatePackage>com.db.accounting.application.server.jaxbautogenerated</generatePackage> 
                <schemaDirectory>src/main/resources</schemaDirectory> 
                <includeSchemas> 
                  <include>accounting.xsd</include> 
                </includeSchemas> 
                <extension>true</extension> 
                <plugins> 
                  <plugin> 
                    <groupId>org.jvnet.jaxb2_commons</groupId> 
                    <artifactId>jaxb2-basics</artifactId> 
                    <version>0.5.3</version> 
                  </plugin> 
                </plugins> 
              </configuration> 
            </execution> 
          </executions> 
        </plugin>