Commit 0058d1ce by chengzhuoshen

有命名空间的xml代码解析,增加去掉命名空间的代码

parent c8d7ade9
......@@ -43,7 +43,7 @@
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.1</version>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
......
......@@ -8,6 +8,8 @@ import com.brilliance.swift.mx2element.camt054001.Mx2ElementCamt054001Creator;
import com.brilliance.swift.mx2element.camt056001.Mx2ElementCamt056001Creator;
import com.brilliance.swift.mx2element.pacs008001.Mx2ElementPacs008001Creator;
import com.brilliance.swift.mx2element.pacs009001.Mx2ElementPacs009001Creator;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.util.XmlUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.prowidesoftware.swift.model.mx.AbstractMX;
......@@ -40,6 +42,11 @@ public class Mx2ElementCreatorManager {
public Map<String, Object> mx2ElementMaps(String xmlStr) throws SwiftException {
xmlStr = handlingXml(xmlStr);
AbstractMX abstractMX = AbstractMX.parse(xmlStr);
//如果存在命名空間則去掉命名空間 重新parse
if (StringUtil.isEmpty(abstractMX.getAppHdr().from())) {
xmlStr = XmlUtil.clearXmlNamespace(xmlStr);
abstractMX = AbstractMX.parse(xmlStr);
}
String messageType = (abstractMX.getMxId().getBusinessProcess().name()
+ "."
+ abstractMX.getMxId().getFunctionality()
......
package com.brilliance.swift.util;
import com.brilliance.swift.exception.SwiftException;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultElement;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.net.URL;
import java.util.HashMap;
......@@ -184,4 +187,40 @@ public class XmlUtil {
}
}
public static String clearXmlNamespace(String xmlStr) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new ByteArrayInputStream(xmlStr.getBytes()));
document.accept(new NameSpaceCleaner());
String xml = document.asXML();
return xml.replaceAll("xmlns:([\\w]*)", "xmlns");
} catch (DocumentException e) {
throw new SwiftException(e.getMessage());
}
}
private static class NameSpaceCleaner extends VisitorSupport {
public void visit(Document document) {
((DefaultElement) document.getRootElement())
.setNamespace(Namespace.NO_NAMESPACE);
document.getRootElement().additionalNamespaces().clear();
}
public void visit(Namespace namespace) {
namespace.detach();
}
public void visit(Attribute node) {
if (node.toString().contains("xmlns")
|| node.toString().contains("xsi:")) {
node.detach();
}
}
public void visit(Element node) {
if (node instanceof DefaultElement) {
((DefaultElement) node).setNamespace(Namespace.NO_NAMESPACE);
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment