Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Status 415 HTTP - XML

0 Likes
4,573

Hi all,

I am getting an error "The server refused this request because the request entity is in a format not supported by the requested resource for the requested method." while I send a XML file to a API.

My code:

CALL METHOD cl_http_client=>create_by_destination
EXPORTING
destination = 'INTEGRATION'
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
destination_not_found = 2
destination_no_authority = 3
plugin_not_active = 4
internal_error = 5
OTHERS = 6.
IF sy-subrc <> 0.

ENDIF.


CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'POST'.

CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = 'text/xml; charset=utf-8'.

CALL METHOD http_client->request->set_cdata
EXPORTING
data = wf_string
offset = 0
length = rlength.

CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.

CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.

wf_string1 = http_client->response->get_cdata( ).

My XML file is:

CLEAR wf_string.
CONCATENATE wf_string
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
'<EIC_MarketDocument>'
'<mRID>' '1117' '</mRID>'
'<type>' 'B03' '</type>'
'<sender_MarketParticipant.marketRole.type>' 'A42' '</sender_MarketParticipant.marketRole.type>'
'<sender_MarketParticipant.mRID CodingScheme = "A01">' '17V' '</sender_MarketParticipant.mRID>'
'<receiver_MarketParticipant.marketRole.type>' 'A40' '</receiver_MarketParticipant.marketRole.type>'
'<receiver_MarketParticipant.mRID CodingScheme = "A01">' '17' '</receiver_MarketParticipant.mRID>'
'<revisionNumber>' '1' '</revisionNumber>'
'<createdDateTime>' '2016-07-06T16:32:38Z' '</createdDateTime>'

'<EICCode_MarketDocument>'
'<long_Names.name>' 'FR_517320' '</long_Names.name>'
'<display_Names.name>' 'FR_517320' '</display_Names.name>'

'<status> <value>A14</value> </status>'
'<attributeInstanceComponent.attribute>' 'Local' '</attributeInstanceComponent.attribute>'

'<lastRequest_DateAndOrTime.date>' '2018-02-12' '</lastRequest_DateAndOrTime.date>'

'<eICCode_MarketParticipant.aCERCode_Names.name>' '' '</eICCode_MarketParticipant.aCERCode_Names.name>'
'<eICCode_MarketParticipant.vATCode_Names.name>' '' '</eICCode_MarketParticipant.vATCode_Names.name>'
'<eICParent_MarketDocument.mRID>' '' '</eICParent_MarketDocument.mRID>'
'</EICCode_MarketDocument>'
'</EIC_MarketDocument>'
INTO wf_string .

Connexion test:

I don't know where is the problem, I did this exactly like others examples in forums.

Thanks you very much for your help!

7 REPLIES 7
Read only

Former Member
0 Likes
3,984

Parameter LENGTH in method SET_CDATA is optional and has default value -1 (automatic length determination).

You send an empty request body with length = 0 in your code. This is interpreted from server as http error 415.

CALL METHOD http_client->request->set_cdata
 EXPORTING
 data = wf_string
 offset = 0
 length = rlength.
Read only

0 Likes
3,984

It didn't work, I have the same message 😞

Read only

0 Likes
3,984

I think the problem was "value = 'text/xml; charset=utf-8'." I changed it by "value = 'application/xml'." and I'am connected.

But, now I have a different error message: "424 Failed Dependency". Is it also a problem SAP or something in the API?

Thanks for your help.

Fernando

Read only

0 Likes
3,984

It was a format problem of XML fichier.

Closed.

Read only

Sandra_Rossi
Active Contributor
3,984

EDIT my answer is probably completely wrong, cf comment by Tibor below.

In your screen shot, the error is 405 "method not allowed", and only POST is allowed (allow=POST). It means that the way you "say" POST is incorrect:

CALL METHOD http_client->request->set_header_field EXPORTING name = '~request_method' value = 'POST'.

Instead, use:

http_client->request->set_method( if_http_request=>co_request_method_post ).

PS: you made a confusion between the true HTTP request method and the SAP "pseudo-header field" ~request_method. The latter is derived automatically from the HTTP request header fields when an incoming HTTP request arrives at SAP. It's used to simplify the processing of the request by the ICF request handler.

PS: I don't understand why you said it was an XML problem (in the request body).

Read only

0 Likes
3,984

The original error from question title is "415 Unsupported Media Type".

The screenshot shows connection test from SM59 and there error message "405 Method not allowed" is correct, because SM59 connection test does not sent a POST request. HTTP error code 405 was not created by the posted source code.

Fix to 415: text/xml -> application/xml

New error: "424 Failed Dependency" -> "It was a format problem of XML fichier. Closed"

Read only

0 Likes
3,984

Sorry, I didn't pay attention that the screenshot originated from SM59.

Thank you for the clarification. 424 is not clearly related to the "file format" though (wikipedia: the request failed because it depended on another request and that request failed (e.g., a PROPPATCH)).

So, my answer was completely wrong 😞

I also probably made a mistake about set_header_field EXPORTING name='~request_method' value='POST'. It probably works with the same behavior as http_client->request->set_method( if_http_request=>co_request_method_post ).