Анализ SOAP-ответа в PLSQL - PullRequest
       29

Анализ SOAP-ответа в PLSQL

0 голосов
/ 17 ноября 2018

Я пытаюсь проанализировать webservice SOAP-ответ, возвращаемый JAVA webservice в plsql.Я не сталкиваюсь с ошибкой, но ничего не получаю.Ниже приведен код

WITH t as (select XMLTYPE('<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:helloResponse xmlns:ns2="http://example.com/">
         <ns2:return>Hello World</ns2:return>
      </ns2:helloResponse>
   </S:Body>
</S:Envelope>') as xml from dual)
  select * 
  from t,
        xmltable(XMLNAMESPACES('http://example.com/' as "ns2"),
                '/Envelope/Body'
                passing t.xml
                columns myret varchar2(50) path '/ns2:helloResponse/ns2:return'
        ) x

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 19 ноября 2018

Я вижу несколько проблем здесь ...

1) У вас есть два пространства имен (одно для конверта и тела, а другое для узлов), которые необходимо учитывать для обоихв вашем выборе

2) в вашем пути для MyRet контекст взят из конверта, поэтому вам нужно либо указать полный путь, либо использовать // в начале.

Я делаю некоторые предположения относительно того, что вы на самом деле хотите, но я думаю, что приведенное ниже должно сработать для вас.

 WITH t as (select XMLTYPE('<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:helloResponse xmlns:ns2="http://example.com/">
         <ns2:return>Hello World</ns2:return>
      </ns2:helloResponse>
   </S:Body>
</S:Envelope>') as xml from dual)
  select * 
  from t,
        xmltable(XMLNAMESPACES('http://example.com/' as "ns2", 'http://schemas.xmlsoap.org/soap/envelope/' as "S"),
                '/S:Envelope/S:Body'
                passing t.xml
                columns myret varchar2(50) path '//ns2:helloResponse/ns2:return'
        ) x
...