Merge branch 'beta' into xingze

# Conflicts:
#	jianshui-admin/src/main/java/com/jianshui/api/controller/webservice/income/v1/impl/InvoiceCheckWebServiceImpl.java
beta-prop-all^2
kane 2 years ago
commit aad1a9a885
  1. 2
      jianshui-admin/src/main/java/com/jianshui/api/config/WebServiceConfig.java
  2. 151
      jianshui-admin/src/main/java/com/jianshui/api/config/WebserviceResponseHandler.java

@ -37,7 +37,7 @@ public class WebServiceConfig {
// EndpointImpl endpoint = new EndpointImpl(springBus(), invoiceCheckWebService);
EndpointImpl endpoint = new EndpointImpl(springBus(), invoiceCheckWebService);
WebserviceResponseHandler webserviceResponseHandler = webserviceResponseHandler();
endpoint.getHandlers().add(webserviceResponseHandler);
// endpoint.getHandlers().add(webserviceResponseHandler);
endpoint.publish("/income/v1/check");
return endpoint;
}

@ -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("&lt;","<").replaceAll("&gt;",">");
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);
}