我有两个Java项目副本。
运行此方法后:
private void editArtifactWSDL() {
try {
File outputfile = new File(
"C:\\WorkSpace\\CMU\\WebContent\\WEB-INF\\bpelfiles\\process\\Artifacts.wsdl");
File skeletonFile = new File(
"C:\\WorkSpace\\CMU\\WebContent\\WEB-INF\\bpelfiles\\SkeletonArtifacts.wsdl");
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(skeletonFile);
Element definitionsElement = doc.getDocumentElement();
// xmlns attributes
editDefinitionsElementToArtifact(doc, definitionsElement);
// partnerLinkType elements
appendPartnerLinkTypeElementsToArtifact(doc, definitionsElement);
// import elements
appendImportElementsToArtifact(doc, definitionsElement);
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(outputfile);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(source, result);
System.out.println("Artifact.wsdl saved!");
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (SAXException sxe) {
sxe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
在其中一个项目中我获得了“干净”Artifacts.wsdl
。在另一个项目中,我将xmlns=""
添加到某些元素中。
SkeletonArtifacts.wsdl非常相似(在http://www.diffnow.com/上比较)
那么这种随机行为的原因是什么?我是否摆脱了xmlns属性?
答案 0 :(得分:0)
我通过使用以下代码制作DocumentBuilder
NameSpaceAware来制作我的DocumentFactory
NameSpaceAware:
docFactory.setNamespaceAware(true);
xmlns=""
属性现已消失。
我仍然不明白为什么这会随机发生。另一个项目不会添加xmlns=""
,即使其DocumentBuilder
不是NameSpaceAware。
对此的任何解释仍然是好的。
编辑:
设置NameSpaceAware后,我意识到在parsig之后添加的元素仍然是xmlns=""
。
我认为来自JRE7的Transfomer
类存在冲突,并且在项目中添加了SAXON jar以集成ODE。