Java JAXB封送器初始化
我需要将JAXB对象封送为xml格式字符串。我正在使用SLSB并钩住代码来创建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(
封送器
,以及@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不会导致任何问题,对吗?我的意思是,如果要封送的对象作为参数传递,会话在连续调用期间会混合?请检查提供的链接。我认为这可能为你的问题提供了更好的答案。