|
|
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть у меня PL\Sql процедура для передачи переменных на веб сервис и получения ответа. DECLARE v_soap_request VARCHAR2(30000); v_http_req utl_http.req; v_http_resp utl_http.resp; v_name VARCHAR2(32767); v_value VARCHAR2(32767); v_txt VARCHAR2(32767); i NUMBER := 1; buf CLOB; BEGIN -- Define the SOAP request according the the definition of the web service being called v_soap_request := '<soapenv:Envelope xmlns:soapenv=" http://schemas.xmlsoap.org/soap/envelope/" xmlns:api2=" http://inr.zd.ua/zd/Api20" xmlns:int=" http://inr.zd.ua/zd/integration20"> <soapenv:Header/> <soapenv:Body> <api2:AddTTN> <api2:AddRequest> <int:Auth> <int:ID>3E2D96AFD976BDEDE050007F01002B2F</int:ID> <int:KEY>3E2D96AFD976BDEDE050007F01002B2F</int:KEY> </int:Auth> <int:TTN> <int:Sender> <int:WarehouseSenderCode>000000863</int:WarehouseSenderCode> <int:SettlementCode></int:SettlementCode> <int:SenderAddress>dfvgg fg</int:SenderAddress> <int:PhoneSender>0665867676</int:PhoneSender> </int:Sender> <int:Receiver> <int:ReceiverClient>Петро Петро Петро</int:ReceiverClient> <int:WarehouseReceiverCode>0</int:WarehouseReceiverCode> <!--Optional:--> <int:SettlementCode></int:SettlementCode> <int:ReceiverAddress>ааввввкуііі</int:ReceiverAddress> <int:PhoneReceiver>+380676170556</int:PhoneReceiver> </int:Receiver> <int:Number></int:Number> <int:PaymentType>OTP</int:PaymentType> <int:DispatchDate>2016-08-14+03:00</int:DispatchDate> <int:POD> <int:PodPays>POL</int:PodPays> <int:PodAmount>0</int:PodAmount> <int:ReceiverPODThird> <int:ReceiverPODThird></int:ReceiverPODThird> <int:WarehouseReceiverPODThird></int:WarehouseReceiverPODThird> <int:PhoneReceiverPODThird></int:PhoneReceiverPODThird> </int:ReceiverPODThird> </int:POD> <int:ContractorPaysThird> <int:ContractorPaysThird></int:ContractorPaysThird> <int:WarehousePaysThird></int:WarehousePaysThird> <int:PhonePaysThird></int:PhonePaysThird> </int:ContractorPaysThird> <int:InsuranceCost>10</int:InsuranceCost> <int:TransportationType>02</int:TransportationType> <int:PaymentMethod>cash</int:PaymentMethod> <!--Zero or more repetitions:--> <int:AdditionalServices> <int:AdditionalServicesCode>2</int:AdditionalServicesCode> <int:AdditionalServicesParametr>15.08.2016 0:00:00;000000007</int:AdditionalServicesParametr> </int:AdditionalServices> <int:Cargo> <int:CargoType>0001</int:CargoType> <int:CargoDescription>Мобильный телефон Samsung</int:CargoDescription> </int:Cargo> <int:CargoParams> <int:Quantity>1</int:Quantity> <int:Weight>1</int:Weight> <int:Volume>0.1</int:Volume> </int:CargoParams> <!--Zero or more repetitions:--> <int:ReservedField> <int:ReservedFieldName></int:ReservedFieldName> <int:ReservedFieldValue></int:ReservedFieldValue> </int:ReservedField> <int:PAS>333</int:PAS> <int:ReceiverCompany></int:ReceiverCompany> <int:SenderCompany></int:SenderCompany> </int:TTN> </api2:AddRequest> </api2:AddTTN> </soapenv:Body> </soapenv:Envelope>'; -- Initialise the request v_http_req := utl_http.begin_request('http://esb.zd.ua/services/zd_api20_sandbox' , --UTL 'POST' , -- method 'HTTP/1.1' -- http_version ); -- set header details utl_http.set_header(v_http_req ,'Accept-Encoding' ,'gzip,deflate'); utl_http.set_header(v_http_req ,'Content-Type' ,'text/xml;charset=UTF-8'); utl_http.set_header(v_http_req ,'Pragma' ,'no-cache'); utl_http.set_header(v_http_req ,'Cache-Control' ,'no-cache'); utl_http.set_header(v_http_req ,'SOAPAction' ,'http://inr.zd.ua/zd/Api20#API20:AddTTN'); utl_http.set_header(v_http_req ,'Content-Length' ,length(v_soap_request)); utl_http.set_header(v_http_req ,'Host' ,'esb.zd.ua'); utl_http.set_header(v_http_req ,'Connection' ,'Keep-Alive'); utl_http.set_header(v_http_req ,'User-Agent' ,'Apache-HttpClient'); LOOP buf := substrb(v_soap_request ,i ,2000); IF buf IS NOT NULL THEN utl_http.write_text(v_http_req ,v_soap_request); i := i + 2000; ELSE EXIT; END IF; END LOOP; -- call the web service and get the response v_http_resp := utl_http.get_response(v_http_req); -- loop through the response headers and write them out FOR i IN 1 .. utl_http.get_header_count(v_http_resp) LOOP utl_http.get_header(v_http_resp ,i ,v_name ,v_value); dbms_output.put_line('Response header ' || i || '-' || v_name || ': ' || v_value); END LOOP; -- create a block to trap the end of body exception when no more lines exist. BEGIN -- loop through the response text which is the soap e details LOOP utl_http.read_line(v_http_resp ,v_txt); dbms_output.put_line('response line ' || v_txt); END LOOP; utl_http.end_response(v_http_resp); dbms_output.put_line('End of response loop'); EXCEPTION -- need to trap end of body exception as there is no other graceful way to do it. WHEN utl_http.end_of_body THEN utl_http.end_response(v_http_resp); dbms_output.put_line('End of response loop'); END; END; Если всё хорошо, то ответ должен быть 200. OK. и номер ... Но, в место это получаю " <soap:Envelope xmlns:soap=" http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring>Неизвестная ошибка. Ошибка разбора XML: - [41,13] Фатальная ошибка: expected '>' по причине: Ошибка разбора XML: - [41,13] Фатальная ошибка: expected '>' </faultstring> <detail/> </soap:Fault> </soap:Body> </soap:Envelope>". Мои попытки найти ответ в гугле на ошибку "Фатальная ошибка: expected '& gt;'" не увенчались успехом. Буду благодарен за помощь в решении данной ошибки. P.S. данный код работает для других методов, которые запрашивают меньше параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 18:38 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crab, очевидно что пакет при передаче корежится, хрустальный шар неуверенно предполагает что тут: Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 19:06 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crabЕсть у меня PL\Sql процедура Код: plsql 1. Врёшь, это не процедура.ora_crab Код: plsql 1. 2. 3. 4. 5. 6. Готовься к ORA-29270: too many open HTTP requests ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 19:19 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
XMLer, Спасибо за ответ, но как-то не помог он. Ругается то на "[", то на количество аргументов ... А Вы не знаете могу ли я посмотреть, что именно оракл передаёт? В SoapUI этот XML работает корректно + логи можно легко посмотреть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 19:29 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
XMLer, хрустальный шар неуверенно предполагает замечательно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 20:03 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crabXMLer, Спасибо за ответ, но как-то не помог он. Ругается то на "[", то на количество аргументов ... А если мозг включить? XMLer намекал, что buf нарезается поБАЙТНО, а отправляется ТЕКСТ, что на мультибайте запросто может приводить к покореженным символам. Но дело даже не в этом. Вопрос - нафига повторять весть v_soap_request ceil(lengthb(v_soap_request)/2000) раз? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 20:19 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crabА Вы не знаете могу ли я посмотреть, что именно оракл передаёт? В SoapUI этот XML работает корректно + логи можно легко посмотреть Забавно. Пользоватьcя SOAPUI и не суметь подвесить monkey, чтобы посмотреть "что именно оракл передаёт"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 20:21 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
http://esb.zd.ua с логотипом wso2...esb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 20:25 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
Dmitry.esb.zd.uaнапомнило слово из девяти букв с одной гласной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 21:00 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousXMLer намекал я с XML столкнулся неделю назад, как он работает и намёки понимать ещё не научился. andrey_anonymousВопрос - нафига повторять весть v_soap_request ceil(lengthb(v_soap_request)/2000) раз? в моём случае цикл повторяется два раза, т.к. v_soap_request больше 2000 байт, а utl_http.write_text может передавать в пределах 2000 байт. andrey_anonymousа отправляется ТЕКСТ, что на мультибайте запросто может приводить к покореженным символам. знаете ли Вы метод, которым можно передать нормально символы передать либо проверить правильность передачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 21:37 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousora_crabА Вы не знаете могу ли я посмотреть, что именно оракл передаёт? В SoapUI этот XML работает корректно + логи можно легко посмотреть Забавно. Пользоватьcя SOAPUI и не суметь подвесить monkey, чтобы посмотреть "что именно оракл передаёт"... да, не умею, по этому и спрашиваю. подсказать можете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 22:24 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crabя с XML столкнулся неделю назад, как он работает и намёки понимать ещё не научился. XML - стандарт а не API, он не может работать. В качестве API ты используешь utl_http, его и изучай. ora_crab знаете ли Вы метод, которым можно передать нормально символы передать либо проверить правильность передачи? Самый надежный метод проверить правильность передачи- передать пакет в своему приложению и визуализировать результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 10:02 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crab, у меня эта ф-ция работает: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. соответственно твой вызов будет: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 10:09 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crabandrey_anonymousВопрос - нафига повторять весь v_soap_request ceil(lengthb(v_soap_request)/2000) раз? в моём случае цикл повторяется два раза, т.к. v_soap_request больше 2000 байт, а utl_http.write_text может передавать в пределах 2000 байт. Как в анекдоте: - Вовочка, что выберешь: Машу один раз или Мишу да раза? - Маша - она, конечно, Маша, но ДВА раза - это все-таки ДВА раза... Нарезали в buf: Код: plsql 1. 2. Но два раза - это же ДВА раза!!! Потому отправим не buf, а v_soap_request. Дважды, ага... Код: plsql 1. ora_crabandrey_anonymousа отправляется ТЕКСТ, что на мультибайте запросто может приводить к покореженным символам. знаете ли Вы метод, которым можно передать нормально символы передать либо проверить правильность передачи? Метод знаю - и передать, и проверить. Но чесслово, уже не верю что поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 10:46 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
Dmitry., спасибо за ответ! функция выдаёт тот же результат, что и мой код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 11:19 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, прежде, чем сюда писать я пробовал два варианта, изначально отправлял без цикла, то есть - utl_http.write_text(v_http_req, v_soap_request); выдавало ту же ошибку, что и с циклом loop buf := SUBSTRB(v_soap_request,i, 2000); if buf is not null then utl_http.write_text(v_http_req, v_soap_request); dbms_output.put_line('send ' || i); i:=i + 2000; else exit; end if; end loop; сложно мне понять цель ваших ответов ... никогда не понимал людей, которые пытаются самоутвердиться за счёт того, что кто-то что-то не знает или пока ещё не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 11:27 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crab ... никогда не понимал людей, которые пытаются самоутвердиться за счёт того, что кто-то что-то не знает или пока ещё не понял.ну кто за чей счет пытается проехать тут не понятно только непонятливым. Мне вот понятно, что некоторым не дано осмыслить инженерный подход. Прочесть полноценно изложенный материал, задаться вопросами, поставить эксперимент... сделать выводы. Считают, что интернет заменяет голову. Но зачем, если не дано, лезть в профессию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 13:36 |
|
||
|
SOAP XML "Фатальная ошибка"
|
|||
|---|---|---|---|
|
#18+
ora_crabсложно мне понять По ходу безнадежен. ...и красным подсветил, и два раза рассказал - как об стенку горох... Последняя попытка - отошлю к доке на SoapUI, если не сумеете использовать для отладки - уже и не знаю, чем еще можно помочь: https://www.soapui.org/soap-mocking/getting-started.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 14:30 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=193&tid=1887151]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 322ms |

| 0 / 0 |
