Java JAXB封送器初始化

Java JAXB封送器初始化,java,xml,xml-serialization,jaxb,marshalling,Java,Xml,Xml Serialization,Jaxb,Marshalling,我需要将JAXB对象封送为xml格式字符串。我正在使用SLSB并钩住代码来创建封送器,以及@PostConstruct注释方法中的其他内容。因此,每次我都不需要加载模式并创建封送拆收器 @PostConstruct注释方法中的代码如下所示 JAXBContext jaxbContext = JAXBContext.newInstance(jaxbPackageName); SchemaFactory factory = SchemaFactory .newInstance(

我需要将JAXB对象封送为xml格式字符串。我正在使用SLSB并钩住代码来创建
封送器
,以及
@PostConstruct
注释方法中的其他内容。因此,每次我都不需要加载模式并创建封送拆收器

@PostConstruct
注释方法中的代码如下所示

  JAXBContext jaxbContext = JAXBContext.newInstance(jaxbPackageName);

  SchemaFactory factory = SchemaFactory
      .newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
  URL schemaUrl = Thread.currentThread().getContextClassLoader()
      .getResource(resourcePath);
  schema = factory.newSchema(schemaUrl);

  setMarshaller(jaxbContext.createMarshaller());

  getMarshaller().setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
      Boolean.FALSE);
  getMarshaller().setSchema(schema);     

  getMarshaller().setEventHandler(new DefaultValidationEventHandler());

  setUnmarshaller(jaxbContext.createUnmarshaller());
  getUnmarshaller().setSchema(schema);
  getUnmarshaller().setEventHandler(new DefaultValidationEventHandler());
当客户机代码需要对象的xml格式时,下面的方法返回相同的格式

    OutputStream outputStream = new ByteArrayOutputStream();
   getMarshaller().setProperty(Marshaller.JAXB_SCHEMA_LOCATION,
        schemaLocation);
    getMarshaller().marshal(document, outputStream);
    xmlString = outputStream.toString();
我关心的是,有没有更好的方法可以做到这一点(当客户机代码想要获取JAXB对象的xml格式时,返回相同格式的最快方法是什么?)


谢谢

我不知道用JAXB进行编组/解编组的其他方法。当我遇到同样的问题时,我检查了CXF代码,结果是一样的

    OutputStream outputStream = new ByteArrayOutputStream();
   getMarshaller().setProperty(Marshaller.JAXB_SCHEMA_LOCATION,
        schemaLocation);
    getMarshaller().marshal(document, outputStream);
    xmlString = outputStream.toString();

请参阅

,我不知道使用JAXB进行编组/解编组的任何其他方法。当我遇到同样的问题时,我检查了CXF代码,结果是一样的

    OutputStream outputStream = new ByteArrayOutputStream();
   getMarshaller().setProperty(Marshaller.JAXB_SCHEMA_LOCATION,
        schemaLocation);
    getMarshaller().marshal(document, outputStream);
    xmlString = outputStream.toString();

请参阅与您的问题没有直接关系的

,但是ByteArrayOutputStream#toString()将使用平台的默认字符编码,而不是JAXB在创建XML文档时使用的编码。根据您对XML文档的进一步计划,最好将其保留为字节数组,而不是试图从中生成一个可能不正确的字符串。

与您的问题没有直接关系,而是通过tearrayoutputstream#toString()将使用平台的默认字符编码,而不是JAXB在创建XML文档时使用的编码。根据您对XML文档的进一步计划,最好将其保留为字节数组,而不是试图从中提取可能不正确的字符串。

将初始化代码挂接到@PostConstruct不会导致任何问题,对吗?我的意思是,如果要封送的对象作为参数传递,会话在连续调用期间会混合?请检查提供的链接。我认为它可能为您的问题提供了更好的答案。将初始化代码挂接到@PostConstruct不会导致任何问题,对吗?我的意思是,如果要封送的对象作为参数传递,会话在连续调用期间会混合?请检查提供的链接。我认为这可能为你的问题提供了更好的答案。