|
|
|
@ -4,10 +4,7 @@ import cn.hutool.core.util.XmlUtil; |
|
|
|
|
import org.w3c.dom.*; |
|
|
|
|
|
|
|
|
|
import javax.xml.namespace.QName; |
|
|
|
|
import javax.xml.parsers.DocumentBuilderFactory; |
|
|
|
|
import javax.xml.parsers.ParserConfigurationException; |
|
|
|
|
import javax.xml.soap.SOAPBody; |
|
|
|
|
import javax.xml.soap.SOAPException; |
|
|
|
|
import javax.xml.soap.SOAPMessage; |
|
|
|
|
import javax.xml.ws.handler.MessageContext; |
|
|
|
|
import javax.xml.ws.handler.soap.SOAPHandler; |
|
|
|
@ -35,25 +32,94 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext |
|
|
|
|
SOAPBody body = message.getSOAPBody(); |
|
|
|
|
Node returnNode = body.getFirstChild().getFirstChild(); |
|
|
|
|
Node dataNode = returnNode.getFirstChild(); |
|
|
|
|
// 修改CDATA标签位置
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// body.getFirstChild().getOwnerDocument().setTextContent(XmlUtil.toStr(dataNode));
|
|
|
|
|
// body.removeChild(dataNode);
|
|
|
|
|
|
|
|
|
|
// addCDataToLeafNodes(dataNode);
|
|
|
|
|
|
|
|
|
|
CDATASection cdata = dataNode.getOwnerDocument().createCDATASection(XmlUtil.toStr(dataNode,"GBK",false,false)); |
|
|
|
|
returnNode.removeChild(dataNode); |
|
|
|
|
returnNode.appendChild(cdata); |
|
|
|
|
// String aa = XmlUtil.toStr(dataNode,"GBK",false,false);
|
|
|
|
|
// returnNode.replaceChild(XmlUtil.parseXml(aa),dataNode);
|
|
|
|
|
|
|
|
|
|
// String cdatameg = "<![CDATA["+ XmlUtil.toStr(returnNode.getFirstChild(),"GBK",false,false) +"]]>";
|
|
|
|
|
/* String cdatameg = XmlUtil.toStr(returnNode.getFirstChild(), "GBK", false, false); |
|
|
|
|
// CDATASection cdata = childNode.getOwnerDocument().createCDATASection(cdatameg);
|
|
|
|
|
cdatameg = cdatameg.replaceAll("&gt;", ">").replaceAll("<", "<").replaceAll(">", ">"); |
|
|
|
|
|
|
|
|
|
String modifiedContent = cdatameg.replace("]]>", "]] >>"); |
|
|
|
|
Element element = body.getOwnerDocument().createElement("return"); |
|
|
|
|
|
|
|
|
|
CDATASection cdata = body.getFirstChild().getFirstChild().getOwnerDocument().createCDATASection(modifiedContent); |
|
|
|
|
element.appendChild(cdata); |
|
|
|
|
|
|
|
|
|
body.removeContents(); |
|
|
|
|
body.appendChild(element); |
|
|
|
|
|
|
|
|
|
body.getOwnerDocument().getOwnerDocument().getTextContent().replaceAll("]] >>", "]]>");*/ |
|
|
|
|
// returnNode.removeChild(dataNode);
|
|
|
|
|
// returnNode.getParentNode().appendChild(element);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* System.out.println(cdatameg); |
|
|
|
|
returnNode.setTextContent(cdatameg); |
|
|
|
|
|
|
|
|
|
String modifiedContent = cdatameg.replace("]]>", "]] >"); |
|
|
|
|
Element element = body.getFirstChild().getFirstChild().getOwnerDocument().createElement("AAD"); |
|
|
|
|
CDATASection cdata = body.getFirstChild().getFirstChild().getOwnerDocument().createCDATASection(modifiedContent); |
|
|
|
|
element.appendChild(cdata); |
|
|
|
|
body.appendChild(element);*/ |
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// String returnNodeStr = XmlUtil.toStr(returnNode).replaceAll("]]>","]]]]><![CDATA[");
|
|
|
|
|
// System.out.println(returnNodeStr);
|
|
|
|
|
//
|
|
|
|
|
// body.getFirstChild().replaceChild(XmlUtil.parseXml(returnNodeStr),returnNode);
|
|
|
|
|
|
|
|
|
|
/* System.out.println("1=>" + returnNode.getNodeName() + returnNode.getNodeValue()); |
|
|
|
|
System.out.println("1=>" + body.getFirstChild()); |
|
|
|
|
|
|
|
|
|
CDATASection cdataSection = returnNode.getOwnerDocument().createCDATASection( returnNode.getTextContent() ); |
|
|
|
|
returnNode.replaceChild(cdataSection, dataNode); |
|
|
|
|
System.out.println("2=>" + returnNode);*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
message.saveChanges(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 修改CDATA标签位置
|
|
|
|
|
// addCDataToLeafNodes(dataNode);
|
|
|
|
|
|
|
|
|
|
// CDATASection cdata = dataNode.getOwnerDocument().createCDATASection(XmlUtil.toStr(dataNode,"GBK",false,false));
|
|
|
|
|
// returnNode.removeChild(dataNode);
|
|
|
|
|
// returnNode.appendChild(cdata);
|
|
|
|
|
|
|
|
|
|
// addCDataToLeafNodes(cdata);
|
|
|
|
|
|
|
|
|
|
// CDATASection cdata = dataNode.getOwnerDocument().createCDATASection(XmlUtil.toStr(dataNode,"GBK",false,false));
|
|
|
|
|
// returnNode.removeChild(dataNode);
|
|
|
|
|
// returnNode.appendChild(cdata);
|
|
|
|
|
|
|
|
|
|
// TODO: 2023/7/12
|
|
|
|
|
// addCDataToLeafNodes(dataNode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// String nodeStr = XmlUtil.toStr(returnNode.getFirstChild(), "GBK", false, false)
|
|
|
|
|
// .replaceAll("<","<").replaceAll(">",">");
|
|
|
|
|
// nodeStr = "<![CDATA[" + nodeStr + "]]>";
|
|
|
|
|
|
|
|
|
|
// dataNode.setTextContent(nodeStr);
|
|
|
|
|
// returnNode.replaceChild(dataNode,XmlUtil.parseXml(nodeStr));
|
|
|
|
|
// System.out.println(nodeStr);
|
|
|
|
|
// 将处理后的XML重新设到SOAP消息中
|
|
|
|
|
// System.out.println(nodeStr);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// body.getFirstChild().removeChild(body.getFirstChild().getFirstChild());
|
|
|
|
|
// CDATASection cdata = Data.getOwnerDocument().createCDATASection(XmlUtil.toStr(fp, "GBK", false, true));
|
|
|
|
|
// body.setTextContent(XmlUtil.toStr(body.getFirstChild()));
|
|
|
|
|
message.saveChanges(); |
|
|
|
|
} catch (SOAPException e) { |
|
|
|
|
|
|
|
|
|
}catch (Exception e) { |
|
|
|
|
throw new RuntimeException(e); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
@ -62,6 +128,19 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* public String convertDocumentToString(Document document) throws Exception { |
|
|
|
|
TransformerFactory transformerFactory = TransformerFactory.newInstance(); |
|
|
|
|
Transformer transformer = transformerFactory.newTransformer(); |
|
|
|
|
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); // 忽略 XML 声明
|
|
|
|
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 格式化输出
|
|
|
|
|
transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "*"); // 适用于所有元素的 CDATA
|
|
|
|
|
|
|
|
|
|
DOMSource source = new DOMSource(document); |
|
|
|
|
StreamResult result = new StreamResult(new StringWriter()); |
|
|
|
|
transformer.transform(source, result); |
|
|
|
|
return result.getWriter().toString(); |
|
|
|
|
}*/ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @Author: kk |
|
|
|
|
* @Description: CDATA类 |
|
|
|
@ -69,47 +148,97 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext |
|
|
|
|
* @Params: |
|
|
|
|
* @Return |
|
|
|
|
*/ |
|
|
|
|
public static void addCDataToLeafNodes(Node returnNode) { |
|
|
|
|
|
|
|
|
|
// public static void addCDataToLeafNodes(Node returnNode) {
|
|
|
|
|
// NodeList childNodes = returnNode.getChildNodes();
|
|
|
|
|
// for (int i = 0; i < childNodes.getLength(); i++) {
|
|
|
|
|
// Node childNode = childNodes.item(i);
|
|
|
|
|
// if (childNode.getNodeType() == Node.ELEMENT_NODE) {
|
|
|
|
|
// addCDataToLeafNodes(childNode);
|
|
|
|
|
// } else if (childNode.getNodeType() == Node.TEXT_NODE) {
|
|
|
|
|
// CDATASection cdata = childNode.getOwnerDocument().createCDATASection(childNode.getNodeValue() + "]]");
|
|
|
|
|
// cdata.setData(cdata.getTextContent() + " ><![CDATA[");
|
|
|
|
|
// returnNode.removeChild(childNode);
|
|
|
|
|
// returnNode.appendChild(cdata);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
/*NodeList childNodes = returnNode.getChildNodes(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* cdate处理 |
|
|
|
|
*/ |
|
|
|
|
// public static void addCDataToLeafNodes(Node node){
|
|
|
|
|
// NodeList childNodes = node.getChildNodes();
|
|
|
|
|
// for (int i = 0; i < childNodes.getLength(); i++){
|
|
|
|
|
// Node childNode = childNodes.item(i);
|
|
|
|
|
// Node xiaochildNode = childNode.getFirstChild();
|
|
|
|
|
// if (xiaochildNode!=null&&xiaochildNode.getNodeType() == Node.ELEMENT_NODE) {
|
|
|
|
|
// addCDataToLeafNodes(childNode);
|
|
|
|
|
// }
|
|
|
|
|
// else if (xiaochildNode!=null&&xiaochildNode.getNodeType() == Node.TEXT_NODE) {
|
|
|
|
|
// // 内容为空
|
|
|
|
|
// String cdatameg = "<"+childNode.getNodeName()+">"+"<![CDATA["+xiaochildNode.getNodeValue()+"]]]] >><![CDATA["+"</"+childNode.getNodeName()+">";
|
|
|
|
|
// CDATASection cdata = childNode.getOwnerDocument().createCDATASection(cdatameg);
|
|
|
|
|
// node.replaceChild(cdata,childNode);
|
|
|
|
|
// }else {
|
|
|
|
|
// // 内容不为空
|
|
|
|
|
// String cdatameg = "<"+childNode.getNodeName()+">"+"]]]] >><![CDATA["+"</"+childNode.getNodeName()+">";
|
|
|
|
|
// CDATASection cdata = childNode.getOwnerDocument().createCDATASection(cdatameg);
|
|
|
|
|
// node.replaceChild(cdata,childNode);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < childNodes.getLength(); i++) { |
|
|
|
|
Node childNode = childNodes.item(i); |
|
|
|
|
Node firstChild = childNode.getFirstChild(); |
|
|
|
|
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 cdatamegRes = cdatameg.replaceAll("<#text>", "").replaceAll("</#text>", ""); |
|
|
|
|
childNode.setTextContent(cdatamegRes); |
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
String cdatameg = "<![CDATA[]]]]>><![CDATA["; |
|
|
|
|
childNode.setTextContent(cdatameg); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
|
|
|
|
|
String nodeStr = XmlUtil.toStr(returnNode); |
|
|
|
|
String[] nodeStrList = nodeStr.split("<"); |
|
|
|
|
String a = ""; |
|
|
|
|
for (String s : nodeStrList) { |
|
|
|
|
a = a + "<![CDATA[<" + s + "]]]]>>"; |
|
|
|
|
} |
|
|
|
|
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++) { |
|
|
|
|
|
|
|
|
|
a = a + "<![CDATA[</" + nodeStrList[i] + "]]]]>>"; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
/*String[] aRs = a.split("]]]]"); |
|
|
|
|
String b = ""; |
|
|
|
|
for (String aR : aRs) { |
|
|
|
|
b = b + "<![CDATA[" + aR + "]]]]"; |
|
|
|
|
}*/ |
|
|
|
|
System.out.println(a); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|