Я новичок в сервисах SOAP.Я создал свои первые SOAP-сервисы, и теперь Team Lead дал мне задание как-то (я не знаю, как) сделать так, чтобы пользователь мог создать XML-файл в качестве шаблона и сохранить данные из базы данных в этот XML-файл.Я пытаюсь найти что-то в Google, но не могу.
<DataTable xmlns="http://tempuri.org/"> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" id="NewDataSet"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="AKONTAS" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="AKONTAS" msprop:BaseTable.0="AKONTAS"> <xs:complexType> <xs:sequence> <xs:element name="A_KONTO" msprop:BaseColumn="A_KONTO" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="NAZIV" msprop:BaseColumn="NAZIV" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="SIFRA_RAD" msprop:BaseColumn="SIFRA_RAD" msprop:OraDbType="104" type="xs:string" minOccurs="0" /> <xs:element name="OPSTINA" msprop:BaseColumn="OPSTINA" msprop:OraDbType="104" type="xs:string" minOccurs="0" /> <xs:element name="MB" msprop:BaseColumn="MB" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="ULICA" msprop:BaseColumn="ULICA" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="BROJ" msprop:BaseColumn="BROJ" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="PBROJ" msprop:BaseColumn="PBROJ" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="MJESTO" msprop:BaseColumn="MJESTO" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="PORESKI" msprop:BaseColumn="PORESKI" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="TRANSAKCIJ" msprop:BaseColumn="TRANSAKCIJ" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="INTERNET" msprop:BaseColumn="INTERNET" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="EMAIL" msprop:BaseColumn="EMAIL" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="KONTAKT" msprop:BaseColumn="KONTAKT" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="TELEFON" msprop:BaseColumn="TELEFON" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="FAKS" msprop:BaseColumn="FAKS" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="DAT_UNOS" msprop:BaseColumn="DAT_UNOS" msprop:OraDbType="106" type="xs:dateTime" minOccurs="0" /> <xs:element name="PDVMB" msprop:BaseColumn="PDVMB" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="VRSTA_KLIJENTA" msprop:BaseColumn="VRSTA_KLIJENTA" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> <xs:element name="DRZAVA" msprop:BaseColumn="DRZAVA" msprop:OraDbType="126" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <NewDataSet xmlns=""> <AKONTAS diffgr:id="AKONTAS1" msdata:rowOrder="0"> <A_KONTO>515534</A_KONTO> <NAZIV>Hanny Moon</NAZIV> <SIFRA_RAD>12366</SIFRA_RAD> <MB>1234567891011</MB> <DAT_UNOS>2005-12-07T00:00:00+01:00</DAT_UNOS> </AKONTAS> </NewDataSet> </diffgr:diffgram> </DataTable>
В общем, вы можете определить SOAP-сообщение со всеми вашими атрибутами.Тем не менее, я думаю, что довольно часто определяют только один параметр SOAP, и этот параметр снова содержит целый XML-файл.Этот встроенный XML-файл может быть любым, что вам нравится.Вот пример такого SOAP-запроса.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://..." xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:Runnings> <param0 xsi:type="xsd:string"><![CDATA[ <DSS> <runner id="1"> <run id="1"><track>1</track><period>9.475</period></run> <run id="2"><track>1</track><period>8.3</period></run> </runner> <runner id="2"> <run id="1"><track>2</track><period>15.475</period></run> <run id="2"><track>2</track><period>12.3</period></run> </runner> </DSS> ]]> </param0> </ns1:Runnings> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Встроенный XML-запрос должен быть заключен в <![CDATA[ ... ]]> или вам нужно экранировать <>&" (вы можете использовать HTF.ESCAPE_SC ), т.е. ваш SOAP-запрос может выглядеть следующим образом:
<![CDATA[ ... ]]>
<>&"
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://..." xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:Runnings> <param0 xsi:type="xsd:string"><DSS> <runner id="1"> <run id="1"><track>1</track><period>9.475</period></run> <run id="2"><track>1</track><period>8.3</period></run> </runner> <runner id="2"> <run id="1"><track>2</track><period>15.475</period></run> <run id="2"><track>2</track><period>12.3</period></run> </runner> </DSS></param0> </ns1:Runnings> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Или вы можете заключить встроенный XML в строку BASE64 (см. Кодирование и декодирование Base64 в Oracle ) с помощью UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW( ... ))), было бы так:
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW( ... )))
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://..." xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:Runnings> <param0 xsi:type="xsd:string">PERTUz4KCTxydW5uZXIgaWQ9IjEiPgoJCTxydW4gaWQ9IjEiPjx0cmFjaz4xPC90 cmFjaz48cGVyaW9kPjkuNDc1PC9wZXJpb2Q+PC9ydW4+CgkJPHJ1biBpZD0iMiI+ PHRyYWNrPjE8L3RyYWNrPjxwZXJpb2Q+OC4zPC9wZXJpb2Q+PC9ydW4+Cgk8L3J1 bm5lcj4KCTxydW5uZXIgaWQ9IjIiPgoJCTxydW4gaWQ9IjEiPjx0cmFjaz4yPC90 cmFjaz48cGVyaW9kPjE1LjQ3NTwvcGVyaW9kPjwvcnVuPgoJCTxydW4gaWQ9IjIi Pjx0cmFjaz4yPC90cmFjaz48cGVyaW9kPjEyLjM8L3BlcmlvZD48L3J1bj4KCTwv cnVubmVyPgo8L0RTUz4=</param0> </ns1:Runnings> </SOAP-ENV:Body> </SOAP-ENV:Envelope>