powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SOAP XML "Фатальная ошибка"
19 сообщений из 19, страница 1 из 1
SOAP XML "Фатальная ошибка"
    #39333071
ora_crab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть у меня 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. данный код работает для других методов, которые запрашивают меньше параметров.
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333086
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora_crab,
очевидно что пакет при передаче корежится, хрустальный шар неуверенно предполагает что тут:
Код: plsql
1.
2.
3.
4.
5.
6.
buf := [color=red]substrb[/color](v_soap_request
,i
,2000);
IF buf IS NOT NULL THEN
utl_http.[color=red]write_text[/color](v_http_req
,v_soap_request);
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333093
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora_crabЕсть у меня PL\Sql процедура
Код: plsql
1.
DECLARE

Врёшь, это не процедура.ora_crab
Код: plsql
1.
2.
3.
4.
5.
6.
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;

Готовься к ORA-29270: too many open HTTP requests
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333098
ora_crab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XMLer,

Спасибо за ответ, но как-то не помог он. Ругается то на "[", то на количество аргументов ...
А Вы не знаете могу ли я посмотреть, что именно оракл передаёт?

В SoapUI этот XML работает корректно + логи можно легко посмотреть
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333120
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLer,

хрустальный шар неуверенно предполагает

замечательно)
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333126
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
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;
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333127
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora_crabА Вы не знаете могу ли я посмотреть, что именно оракл передаёт?

В SoapUI этот XML работает корректно + логи можно легко посмотреть
Забавно.
Пользоватьcя SOAPUI и не суметь подвесить monkey, чтобы посмотреть "что именно оракл передаёт"...
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333130
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://esb.zd.ua с логотипом wso2...esb
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333136
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.esb.zd.uaнапомнило слово из девяти букв с одной гласной.
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333141
ora_crab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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а отправляется ТЕКСТ, что на мультибайте запросто может приводить к покореженным символам.
знаете ли Вы метод, которым можно передать нормально символы передать либо проверить правильность передачи?
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333155
ora_crab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousora_crabА Вы не знаете могу ли я посмотреть, что именно оракл передаёт?

В SoapUI этот XML работает корректно + логи можно легко посмотреть
Забавно.
Пользоватьcя SOAPUI и не суметь подвесить monkey, чтобы посмотреть "что именно оракл передаёт"...
да, не умею, по этому и спрашиваю. подсказать можете?
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333293
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora_crabя с XML столкнулся неделю назад, как он работает и намёки понимать ещё не научился.
XML - стандарт а не API, он не может работать. В качестве API ты используешь utl_http, его и изучай.

ora_crab знаете ли Вы метод, которым можно передать нормально символы передать либо проверить правильность передачи?
Самый надежный метод проверить правильность передачи- передать пакет в своему приложению и визуализировать результат.
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333299
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
CREATE FUNCTION httpPost
(
    p_url     IN VARCHAR2,
    p_data    IN CLOB,
    p_timeout IN BINARY_INTEGER DEFAULT 60
) 
    RETURN CLOB
IS
    --
    v_request  utl_http.req;
    v_response utl_http.resp;
    v_buffer   CLOB;
    v_chunk    VARCHAR2(4000);
    v_length   NUMBER;
    v_index    NUMBER;
BEGIN

    v_index := 1;
    v_length := nvl(length(p_data), 0);

    -- configure HTTP
    utl_http.set_response_error_check(enable => FALSE);
    utl_http.set_detailed_excp_support(enable => FALSE);
    utl_http.set_transfer_timeout(p_timeout);

    -- send request
    v_request := utl_http.begin_request(p_url, 'POST','HTTP/1.0');
    utl_http.set_header(v_request, 'Content-Type', 'text/xml');
    utl_http.set_header(v_request, 'Content-Length', v_length);
    WHILE v_index <= v_length LOOP
        utl_http.write_text(v_request, substr(p_data, v_index, 4000));
        v_index := v_index + 4000;
    END LOOP;

    -- check HTTP status code for error
    IF v_response.status_code <> utl_http.http_ok THEN   
        raise_application_error(-20400,v_response.status_code || ' - ' || v_response.reason_phrase);
    END IF;

    -- get response
    dbms_lob.createtemporary(v_buffer, FALSE);
    v_response := utl_http.get_response(v_request);
    BEGIN
        LOOP
            utl_http.read_text(v_response, v_chunk, 4000);
            dbms_lob.writeappend(v_buffer, length(v_chunk), v_chunk);
        END LOOP;
    EXCEPTION
        WHEN utl_http.end_of_body THEN NULL;
    END;
    utl_http.end_response(v_response);

    RETURN v_buffer;

END;




соответственно твой вызов будет:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select httppost(
'http://esb.zd.ua/services/zd_api20_sandbox', 
'<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>
...ИТД...
') 
from dual
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333340
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
LOOP
buf := substrb(v_soap_request,i,2000);



Но два раза - это же ДВА раза!!!
Потому отправим не buf, а v_soap_request.
Дважды, ага...

Код: plsql
1.
utl_http.write_text(v_http_req,v_soap_request);



ora_crabandrey_anonymousа отправляется ТЕКСТ, что на мультибайте запросто может приводить к покореженным символам.
знаете ли Вы метод, которым можно передать нормально символы передать либо проверить правильность передачи?

Метод знаю - и передать, и проверить.
Но чесслово, уже не верю что поможет.
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333367
ora_crab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry., спасибо за ответ! функция выдаёт тот же результат, что и мой код.
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333383
ora_crab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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;

сложно мне понять цель ваших ответов ... никогда не понимал людей, которые пытаются самоутвердиться за счёт того, что кто-то что-то не знает или пока ещё не понял.
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333549
ora_crab ... никогда не понимал людей, которые пытаются самоутвердиться за счёт того, что кто-то что-то не знает или пока ещё не понял.ну кто за чей счет пытается проехать тут не понятно только непонятливым.
Мне вот понятно, что некоторым не дано осмыслить инженерный подход. Прочесть полноценно изложенный материал, задаться вопросами, поставить эксперимент... сделать выводы. Считают, что интернет заменяет голову.
Но зачем, если не дано, лезть в профессию?
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39333606
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora_crabсложно мне понять
По ходу безнадежен.
...и красным подсветил, и два раза рассказал - как об стенку горох...

Последняя попытка - отошлю к доке на SoapUI, если не сумеете использовать для отладки - уже и не знаю, чем еще можно помочь:
https://www.soapui.org/soap-mocking/getting-started.html
...
Рейтинг: 0 / 0
SOAP XML "Фатальная ошибка"
    #39334246
ora_crab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл решение.
В случае отправки большого XML, как в моём случае, нужна такая строчка кода

UTL_HTTP.SET_HEADER(v_http_req, NAME => 'Transfer-Encoding', VALUE => 'chunked');
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SOAP XML "Фатальная ошибка"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]