|
|
|
@ -4,11 +4,21 @@ import cn.hutool.core.util.XmlUtil; |
|
|
|
|
import org.w3c.dom.*; |
|
|
|
|
|
|
|
|
|
import javax.xml.namespace.QName; |
|
|
|
|
import javax.xml.parsers.DocumentBuilder; |
|
|
|
|
import javax.xml.parsers.DocumentBuilderFactory; |
|
|
|
|
import javax.xml.parsers.ParserConfigurationException; |
|
|
|
|
import javax.xml.soap.SOAPBody; |
|
|
|
|
import javax.xml.soap.SOAPMessage; |
|
|
|
|
import javax.xml.transform.OutputKeys; |
|
|
|
|
import javax.xml.transform.Transformer; |
|
|
|
|
import javax.xml.transform.TransformerException; |
|
|
|
|
import javax.xml.transform.TransformerFactory; |
|
|
|
|
import javax.xml.transform.dom.DOMSource; |
|
|
|
|
import javax.xml.transform.stream.StreamResult; |
|
|
|
|
import javax.xml.ws.handler.MessageContext; |
|
|
|
|
import javax.xml.ws.handler.soap.SOAPHandler; |
|
|
|
|
import javax.xml.ws.handler.soap.SOAPMessageContext; |
|
|
|
|
import java.io.StringWriter; |
|
|
|
|
import java.util.Set; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -22,6 +32,18 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public String nodeToString(Node node) throws TransformerException { |
|
|
|
|
Transformer transformer = TransformerFactory.newInstance().newTransformer(); |
|
|
|
|
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); |
|
|
|
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); |
|
|
|
|
transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "element-name"); |
|
|
|
|
|
|
|
|
|
StringWriter sw = new StringWriter(); |
|
|
|
|
transformer.transform(new DOMSource(node), new StreamResult(sw)); |
|
|
|
|
|
|
|
|
|
return sw.toString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean handleMessage(SOAPMessageContext context) { |
|
|
|
|
SOAPMessage message = context.getMessage(); |
|
|
|
@ -33,6 +55,20 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext |
|
|
|
|
Node returnNode = body.getFirstChild().getFirstChild(); |
|
|
|
|
Node dataNode = returnNode.getFirstChild(); |
|
|
|
|
|
|
|
|
|
addCDataToLeafNodes(dataNode); |
|
|
|
|
|
|
|
|
|
String xmlStr = XmlUtil.toStr(dataNode,"GBK",false,false).replaceAll("<","<").replaceAll(">",">"); |
|
|
|
|
|
|
|
|
|
System.out.println(xmlStr); |
|
|
|
|
CDATASection cdata = dataNode.getOwnerDocument().createCDATASection( xmlStr ); |
|
|
|
|
// CDATASection cdata = dataNode.getOwnerDocument().createCDATASection( "<" + dataNode.getNodeName() +"><?xml version=\"1.0\" encoding=\"GBK\"><![CDATA[037001700107]]]]>><![CDATA["+ XmlUtil.toStr(dataNode) + "</" + dataNode.getNodeName() + ">");
|
|
|
|
|
returnNode.removeChild(dataNode); |
|
|
|
|
returnNode.appendChild(cdata); |
|
|
|
|
|
|
|
|
|
// dataNode.getOwnerDocument().getDocumentElement().setAttribute("","<?xml version=\"1.0\" encoding=\"GBK\"?>");
|
|
|
|
|
// dataNode.getOwnerDocument().setXmlVersion("<?xml version=\"1.0\" encoding=\"GBK\"?>");
|
|
|
|
|
// 设置 SOAP 版本为 1.1\
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// body.getFirstChild().getOwnerDocument().setTextContent(XmlUtil.toStr(dataNode));
|
|
|
|
|
// body.removeChild(dataNode);
|
|
|
|
@ -150,7 +186,7 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext |
|
|
|
|
*/ |
|
|
|
|
public static void addCDataToLeafNodes(Node returnNode) { |
|
|
|
|
|
|
|
|
|
/*NodeList childNodes = returnNode.getChildNodes(); |
|
|
|
|
NodeList childNodes = returnNode.getChildNodes(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < childNodes.getLength(); i++) { |
|
|
|
@ -159,85 +195,84 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext |
|
|
|
|
if (firstChild != null && childNode.getNodeType() == Node.ELEMENT_NODE) { |
|
|
|
|
addCDataToLeafNodes(childNode); |
|
|
|
|
} else if (childNode.getNodeType() == Node.TEXT_NODE) { |
|
|
|
|
String cdatameg = "<" + childNode.getNodeName() + "><![CDATA[" + childNode.getNodeValue() + "]]]]>><![CDATA[</" + childNode.getNodeName() + ">"; |
|
|
|
|
String cdatameg = "<" + childNode.getNodeName() + "><![CDATA[" + childNode.getNodeValue() + "]]]] >><![CDATA[</" + childNode.getNodeName() + ">"; |
|
|
|
|
String cdatamegRes = cdatameg.replaceAll("<#text>", "").replaceAll("</#text>", ""); |
|
|
|
|
childNode.setTextContent(cdatamegRes); |
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
String cdatameg = "<![CDATA[]]]]>><![CDATA["; |
|
|
|
|
String cdatameg = "<![CDATA[]]]] >><![CDATA["; |
|
|
|
|
childNode.setTextContent(cdatameg); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String nodeStr = XmlUtil.toStr(returnNode); |
|
|
|
|
/*String nodeStr = XmlUtil.toStr(returnNode); |
|
|
|
|
String[] nodeStrList = nodeStr.split("<"); |
|
|
|
|
String a = ""; |
|
|
|
|
for (String s : nodeStrList) { |
|
|
|
|
a = a + "<![CDATA[<" + s + "]]]]>>"; |
|
|
|
|
} |
|
|
|
|
System.out.println(a); |
|
|
|
|
System.out.println(a);*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
|
|
|
|
|
|
String aaaa = "<DATA>\n" + |
|
|
|
|
" <fp>\n" + |
|
|
|
|
" <Gfyhzh/>\n" + |
|
|
|
|
" <Kprq>2019-05-23</Kprq>\n" + |
|
|
|
|
" <Jshj>54.00</Jshj>\n" + |
|
|
|
|
" <Xfsh>92370100MA3EKX4426</Xfsh>\n" + |
|
|
|
|
" <Xfyhzh/>\n" + |
|
|
|
|
" <Gfdzdh/>\n" + |
|
|
|
|
" <Xfmc>高新开发区舜华惠嘉餐厅</Xfmc>\n" + |
|
|
|
|
" <Zfbz>N</Zfbz>\n" + |
|
|
|
|
" <Fphm>99424340</Fphm>\n" + |
|
|
|
|
" <Jqbm>661720186729</Jqbm>\n" + |
|
|
|
|
" <Fpdm>037001700107</Fpdm>\n" + |
|
|
|
|
" <Hcbz>N</Hcbz>\n" + |
|
|
|
|
" <Se>1.57</Se>\n" + |
|
|
|
|
" <Gfmc>个人</Gfmc>\n" + |
|
|
|
|
" <Gfsh/>\n" + |
|
|
|
|
" <Fplx>11</Fplx>\n" + |
|
|
|
|
" <Bz/>\n" + |
|
|
|
|
" <Je>52.43</Je>\n" + |
|
|
|
|
" <Jym>781948</Jym>\n" + |
|
|
|
|
" <Xfdzdh/>\n" + |
|
|
|
|
" <Sph>\n" + |
|
|
|
|
" <Xh>1</Xh>\n" + |
|
|
|
|
" <Ggxh/>\n" + |
|
|
|
|
" <Se>1.57</Se>\n" + |
|
|
|
|
" <Taxcode>3070401000000000000</Taxcode>\n" + |
|
|
|
|
" <Spmc>*餐饮服务*餐费</Spmc>\n" + |
|
|
|
|
" <Dj/>\n" + |
|
|
|
|
" <Jldw/>\n" + |
|
|
|
|
" <Sl/>\n" + |
|
|
|
|
" <Je>52.43</Je>\n" + |
|
|
|
|
" <Slv>3%</Slv>\n" + |
|
|
|
|
" </Sph>\n" + |
|
|
|
|
" </fp>\n" + |
|
|
|
|
" <result>\n" + |
|
|
|
|
" <code>1</code>\n" + |
|
|
|
|
" <message>查验成功</message>\n" + |
|
|
|
|
" </result>\n" + |
|
|
|
|
" </DATA>"; |
|
|
|
|
|
|
|
|
|
String nodeStr = aaaa; |
|
|
|
|
String[] nodeStrList = nodeStr.split("</"); |
|
|
|
|
String a = ""; |
|
|
|
|
for (int i = 0; i < nodeStrList.length; i++) { |
|
|
|
|
try { |
|
|
|
|
// 创建 Document 对象
|
|
|
|
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |
|
|
|
|
DocumentBuilder builder = factory.newDocumentBuilder(); |
|
|
|
|
Document document = builder.newDocument(); |
|
|
|
|
|
|
|
|
|
// 创建根元素节点
|
|
|
|
|
Element rootElement = document.createElement("root"); |
|
|
|
|
|
|
|
|
|
// 创建父元素节点 myData
|
|
|
|
|
Element myDataElement = document.createElement("myData"); |
|
|
|
|
|
|
|
|
|
// 创建字符数据块节点
|
|
|
|
|
CDATASection cdata = document.createCDATASection("]]>This is some data"); |
|
|
|
|
myDataElement.appendChild(cdata); |
|
|
|
|
|
|
|
|
|
a = a + "<![CDATA[</" + nodeStrList[i] + "]]]]>>"; |
|
|
|
|
// 将 myData 父元素节点添加到根元素中
|
|
|
|
|
rootElement.appendChild(myDataElement); |
|
|
|
|
|
|
|
|
|
// 创建父元素节点 Fp
|
|
|
|
|
Element FpElement = document.createElement("Fp"); |
|
|
|
|
|
|
|
|
|
// 创建字符数据块节点
|
|
|
|
|
CDATASection cdata1 = document.createCDATASection("]]>This is some data"); |
|
|
|
|
FpElement.appendChild(cdata1); |
|
|
|
|
|
|
|
|
|
// 将 Fp 父元素节点添加到根元素中
|
|
|
|
|
rootElement.appendChild(FpElement); |
|
|
|
|
|
|
|
|
|
// 将根元素节点添加到文档中
|
|
|
|
|
document.appendChild(rootElement); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 移除standalone属性
|
|
|
|
|
document.setXmlStandalone(true); |
|
|
|
|
|
|
|
|
|
// 将 Document 对象转换为字符串输出
|
|
|
|
|
TransformerFactory transformerFactory = TransformerFactory.newInstance(); |
|
|
|
|
Transformer transformer = transformerFactory.newTransformer(); |
|
|
|
|
|
|
|
|
|
// 设置输出属性,包括编码方式
|
|
|
|
|
transformer.setOutputProperty(OutputKeys.METHOD, "xml"); |
|
|
|
|
transformer.setOutputProperty(OutputKeys.ENCODING, "GBK"); |
|
|
|
|
// 美化输出格式
|
|
|
|
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); |
|
|
|
|
|
|
|
|
|
// 将 XML 声明节点插入到文档开头
|
|
|
|
|
DOMSource source = new DOMSource(document); |
|
|
|
|
StreamResult result = new StreamResult(System.out); |
|
|
|
|
transformer.transform(source, result); |
|
|
|
|
} catch (ParserConfigurationException | TransformerException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
/*String[] aRs = a.split("]]]]"); |
|
|
|
|
String b = ""; |
|
|
|
|
for (String aR : aRs) { |
|
|
|
|
b = b + "<![CDATA[" + aR + "]]]]"; |
|
|
|
|
}*/ |
|
|
|
|
System.out.println(a); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|