使用 Java 将 SOAP 消息格式转换为套接字消息格式,反之亦然
SOAP Message format to Socket Message format conversion and vice versa using Java
我目前正在使用 Java 研究 SOAP 消息格式到套接字消息格式的转换,反之亦然。
我需要它来重用读取套接字格式消息的旧系统以连接到发送和接收 SOAP 消息格式的网站。
我应该怎么做?我应该考虑文本处理吗?
示例套接字到 SOAP
插座
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Interface Code="20"
<Transaction Txn="01880120121024000001" CD="01880120121024000001001"
Date="2012-10-24 17:27:25" BirthDate="1983-03-27" Code="8110009000000720" Type="0"/>
</Interface>
香皂
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<webRequest xmlns="http://____________">
<arg0 xmlns=""><?xml version="1.0" encoding="UTF-8"
standalone="yes"?><Interface xmlns="http://____________"
Version="1.0" Code="20" Txn="123" CD="456"><Info
BirthDate="1983-03-27" Code="1234" Type="0" /></Interface></arg0>
</webRequest>
</soapenv:Body>
</soapenv:Envelope>
套接字消息是 SOAP 消息的 XML 转义主体。您不需要额外的库,因为 parsing SOAP requests.
有 javax 类
SOAP 到套接字很简单:
String message = "<?xml version='1.0' encoding='UTF-8'?>\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soapenv:Body>\n <webRequest xmlns=\"http://____________\">\n <arg0 xmlns=\"\"><?xml version=\"1.0\" encoding=\"UTF-8\"\n standalone=\"yes\"?><Interface xmlns=\"http://____________\"\n Version=\"1.0\" Code=\"20\" Txn=\"123\" CD=\"456\"><Info\n BirthDate=\"1983-03-27\" Code=\"1234\" Type=\"0\" /></Interface></arg0>\n </webRequest>\n </soapenv:Body>\n</soapenv:Envelope>";
InputStream is = new ByteArrayInputStream(message.getBytes());
SOAPMessage request = MessageFactory.newInstance().createMessage(null, is);
System.out.println(request.getSOAPBody().getTextContent());
SOAP 的套接字更复杂,因为我们需要创建 webRequest
包装元素:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true); // webRequest needs a namespace
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElementNS("http://____________", "webRequest");
doc.appendChild(root);
Element argElement = doc.createElement("arg0");
root.appendChild(argElement);
String message = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Interface Code=\"20\" \n <Transaction Txn=\"01880120121024000001\" CD=\"01880120121024000001001\" \n Date=\"2012-10-24 17:27:25\" BirthDate=\"1983-03-27\" Code=\"8110009000000720\" Type=\"0\"/>\n</Interface>";
argElement.setTextContent(message);
SOAPMessage request = MessageFactory.newInstance().createMessage();
request.getSOAPBody().addDocument(doc);
request.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
request.writeTo(System.out);
我目前正在使用 Java 研究 SOAP 消息格式到套接字消息格式的转换,反之亦然。
我需要它来重用读取套接字格式消息的旧系统以连接到发送和接收 SOAP 消息格式的网站。
我应该怎么做?我应该考虑文本处理吗?
示例套接字到 SOAP
插座
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Interface Code="20"
<Transaction Txn="01880120121024000001" CD="01880120121024000001001"
Date="2012-10-24 17:27:25" BirthDate="1983-03-27" Code="8110009000000720" Type="0"/>
</Interface>
香皂
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<webRequest xmlns="http://____________">
<arg0 xmlns=""><?xml version="1.0" encoding="UTF-8"
standalone="yes"?><Interface xmlns="http://____________"
Version="1.0" Code="20" Txn="123" CD="456"><Info
BirthDate="1983-03-27" Code="1234" Type="0" /></Interface></arg0>
</webRequest>
</soapenv:Body>
</soapenv:Envelope>
套接字消息是 SOAP 消息的 XML 转义主体。您不需要额外的库,因为 parsing SOAP requests.
有 javax 类SOAP 到套接字很简单:
String message = "<?xml version='1.0' encoding='UTF-8'?>\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soapenv:Body>\n <webRequest xmlns=\"http://____________\">\n <arg0 xmlns=\"\"><?xml version=\"1.0\" encoding=\"UTF-8\"\n standalone=\"yes\"?><Interface xmlns=\"http://____________\"\n Version=\"1.0\" Code=\"20\" Txn=\"123\" CD=\"456\"><Info\n BirthDate=\"1983-03-27\" Code=\"1234\" Type=\"0\" /></Interface></arg0>\n </webRequest>\n </soapenv:Body>\n</soapenv:Envelope>";
InputStream is = new ByteArrayInputStream(message.getBytes());
SOAPMessage request = MessageFactory.newInstance().createMessage(null, is);
System.out.println(request.getSOAPBody().getTextContent());
SOAP 的套接字更复杂,因为我们需要创建 webRequest
包装元素:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true); // webRequest needs a namespace
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElementNS("http://____________", "webRequest");
doc.appendChild(root);
Element argElement = doc.createElement("arg0");
root.appendChild(argElement);
String message = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Interface Code=\"20\" \n <Transaction Txn=\"01880120121024000001\" CD=\"01880120121024000001001\" \n Date=\"2012-10-24 17:27:25\" BirthDate=\"1983-03-27\" Code=\"8110009000000720\" Type=\"0\"/>\n</Interface>";
argElement.setTextContent(message);
SOAPMessage request = MessageFactory.newInstance().createMessage();
request.getSOAPBody().addDocument(doc);
request.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
request.writeTo(System.out);