我在使用JAXB marshaller的marshaleng中遇到了一个奇怪的行为。 不幸的是,由于我无权将这些模型的代码上传到网络上,因此无法带入这些模型的代码(来自生产环境)。并想出具有这种行为的测试模型是行不通的。我将尝试用语言来描述问题。
我有JAXB从XSD生成的复杂模型。我在SOAP Web服务中收到此模型(JAXB对象),并获得了该请求的一部分。
org.w3c.dom.Element partOfRequest = fullRequest.getAny();
之后,我尝试将partOfRequest
转换为String
并保存到数据库。
@Override
public String unMarshalElementToString(Element element) {
try {
Document document = element.getOwnerDocument();
DOMImplementationLS domImplLS = (DOMImplementationLS) document.getImplementation();
LSSerializer serializer = domImplLS.createLSSerializer();
return serializer.writeToString(element);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
在这一点上,我遇到了问题:
当我在机器上启动App时-我有正确的带有名称空间的字符串。
当我在第一台测试机上启动App时-我具有正确的带有名称空间的字符串。
但是,当我在第二台测试机上启动App时-我的字符串具有不同的名称空间。并且添加了xmlns=""
。
这怎么可能?相同的123.jar文件在具有相同Java版本的不同计算机上运行,但是在编组时会得到不同的结果吗?哪种方式看?检查什么?怎么会这样?