Skip to Content
0
Aug 06, 2012 at 03:37 PM

Consumer Proxy: CX_SXML_PARSE_ERROR:SXML reader/writer exception.Error while parsing an XML stream: 'undeclared namespace prefix'.

2861 Views

Hi,

I am trying to consume a third party web service. This web service requires OASIS security header. I went thru some of the posts and found that I need to add SOAP header using some abap code. I implemented the code and tried to run it. However, I am getting error "CX_SXML_PARSE_ERROR:SXML reader/writer exception.Error while parsing an XML stream: 'undeclared namespace prefix'."

Did anyone encounter such error? How can we resolve that?

Also, please refer to log from SOAMANGER:

Logical port: ZLP

Code:

REPORT zchirag_test6.

DATA: lr_proxy TYPE REF TO zws_co_user_web_service,
lr_ws_header TYPE REF TO if_wsprotocol_ws_header,
ls_req TYPE zws_user_web_service_get_user3,
ls_resp TYPE zws_user_web_service_get_user2,
name TYPE string,
namespace TYPE string,
system_fault TYPE REF TO cx_ai_system_fault.


TRY.
CREATE OBJECT lr_proxy
EXPORTING
logical_port_name = 'ZLP'.

lr_ws_header ?= lr_proxy->get_protocol('IF_WSPROTOCOL_WS_HEADER').


DATA: ixml TYPE REF TO if_ixml,
xml_document TYPE REF TO if_ixml_document,
xml_root TYPE REF TO if_ixml_element,
xml_element TYPE REF TO if_ixml_element,
xml_node TYPE REF TO if_ixml_node.
DATA l_xstring TYPE xstring.
DATA l_string TYPE string.

CONCATENATE

'<soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.mrted.com/">'
'<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">'
'<wsse:UsernameToken wsu:Id="UsernameToken-10">'
'<wsse:Username>XXXXXX</wsse:Username>'
'<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXXXX</wsse:Password>'
'<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">XXXXXX</wsse:Nonce>'
'<wsu:Created>2012-07-25T04:05:47.779Z</wsu:Created>'
'</wsse:UsernameToken>'
'</wsse:Security>'
'</soapenv:Header>'


INTO l_string RESPECTING BLANKS.

* convert to xstring
l_xstring = cl_proxy_service=>cstring2xstring( l_string ).
IF NOT l_string IS INITIAL.
* create ixml dom document from xml xstring
CALL FUNCTION 'SDIXML_XML_TO_DOM'
EXPORTING
xml = l_xstring
IMPORTING
document = xml_document
EXCEPTIONS
invalid_input = 1
OTHERS = 2.
IF sy-subrc = 0 AND NOT xml_document IS INITIAL.
xml_root = xml_document->get_root_element( ).
xml_element ?= xml_root->get_first_child( ).
* add header element by element to soap header
WHILE NOT xml_element IS INITIAL.
name = xml_element->get_name( ).
namespace = xml_element->get_namespace_uri( ).
lr_ws_header->set_request_header( name = name namespace = namespace dom = xml_element ).
xml_element ?= xml_element->get_next( ).
ENDWHILE.
ENDIF.
ENDIF.

ls_req-get_user_by_id-id = '1'.

CALL METHOD lr_proxy->get_user_by_id(
EXPORTING input = ls_req
IMPORTING output = ls_resp ).

CATCH cx_ai_system_fault INTO system_fault.
WRITE system_fault->errortext.
CATCH cx_root.
ENDTRY.

Thanks,

Chirag

Attachments

pastedImage_12.png (41.4 kB)