Получение нулевого результата по запросу SOAPJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Получение нулевого результата по запросу SOAP

Сообщение Anonymous »

Я пытаюсь отправить запрос на мыло к конечной точке правительства Бразилии, и у меня возникли некоторые проблемы.
Они предоставляют доступ к следующему wsdl: https://mdfe-homologacao .svrs.rs.gov.br/ws/MDFeRecepcaoSinc/MDFeRecepcaoSinc.asmx?wsdl
Затем я сгенерировал соответствующую заглушку с помощью инструмента wsimport, которая состоит из следующего:
  • MDFeRecepcaoSinc.java
  • MdfeRecepcaoResult.java
  • MDFeRecepcaoSincSoap12.java (интерфейс)
    ObjectFactory.java
  • package-info.java
Затем на моем Java-приложение, я сделал следующее:

Код: Выделить всё

            ObjectFactory of = new ObjectFactory();
JAXBElement jaxb = of.createMdfeDadosMsg("?");
MDFeRecepcaoSinc recepcao = new MDFeRecepcaoSinc();
MDFeRecepcaoSincSoap12 soap = recepcao.getMDFeRecepcaoSincSoap12(
//                  new AddressingFeature(true),
//                  new MTOMFeature(false),
//                  new RespectBindingFeature(true)
);
System.out.println(soap.mdfeRecepcao(jaxb.getValue()).getContent());
Хотя единственный результат, который я получаю, независимо от основного текста, — это [[retMDFe: null]].
Мне удалось заставить его работать на SoapUI с точно таким же конвертом запроса, и он возвращает правильный xml с несколькими тегами внутри retMDFe.
Похоже, он подключается к их серверу. из моего Java-клиента, поскольку тег retMDFe отсутствует в файле WSDL или какой-либо созданной мной заглушке, и поскольку я больше не получаю ошибку 403 – Forbidden (правильно настроил системное хранилище ключей) .
К сожалению, этот веб-сервис разрешает только соединения, выданные с помощью цифрового сертификата.
Я подозреваю, что ошибка может быть связана с сопоставлением конечной точки. в класс MdfeRecepcaoResult.
Я пробовал несколько вещей:
  • включение различных WebServiceFeatures в конструкторе reepcao.getMDFeRecepcaoSincSoap12, хотя только MTOMFeature как true вернуло что-то другое: клиент получил ошибку SOAP от сервера: сервер не смог обработать запрос. ---> Данные на корневом уровне недействительны. Строка 1, позиция 1. См. журнал сервера, чтобы узнать более подробную информацию о точной причине сбоя.;
  • изменение типа возвращаемого значения mdfeRecepcao с MdfeRecepcaoResult на String, что дало мне пустая строка;
  • комментирование аннотаций к mdfeRecepcao, которое продолжало давать мне ответ [[retMDFe: null]];
  • также пробовал передавать разные строки XML непосредственно в метод Soap.mdfeRecepcao(), но получил те же результаты.
Что я здесь делаю не так? Спасибо, что уделили время!
Изменить 1:
  • Объявление mdfeRecepcao внутри MDFeRecepcaoSincSoap12 интерфейс:

Код: Выделить всё

    /**
*
* @param mdfeDadosMsg
* @return
*     returns br.inf.portalfiscal.mdfe.wsdl.mdferecepcaosinc.MdfeRecepcaoResult
*/
@WebMethod(action = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc/mdfeRecepcao")
@WebResult(name = "mdfeRecepcaoResult", targetNamespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc", partName = "mdfeRecepcaoResult")
public MdfeRecepcaoResult mdfeRecepcao(
@WebParam(name = "mdfeDadosMsg", targetNamespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc", partName = "mdfeDadosMsg")
String mdfeDadosMsg);
  • Объявление createMdfeDadosMsg внутри класса ObjectFactory

Код: Выделить всё

    /**
* Create an instance of {@link JAXBElement }{@code }}
*
*/
@XmlElementDecl(namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc", name = "mdfeDadosMsg")
public JAXBElement createMdfeDadosMsg(String value) {
return new JAXBElement(_MdfeDadosMsg_QNAME, String.class, null, value);
}
Изменить 2:

[*]версия wsimport: версия wsimport "2.2. 9"

[*]Файлы, сгенерированные wsimport:

Код: Выделить всё

br/inf/portalfiscal/mdfe/wsdl/mdferecepcaosinc/MDFeRecepcaoSinc.java
br/inf/portalfiscal/mdfe/wsdl/mdferecepcaosinc/MDFeRecepcaoSincSoap12.java
br/inf/portalfiscal/mdfe/wsdl/mdferecepcaosinc/MdfeRecepcaoResult.java
br/inf/portalfiscal/mdfe/wsdl/mdferecepcaosinc/ObjectFactory.java
br/inf/portalfiscal/mdfe/wsdl/mdferecepcaosinc/package-info.java
Для создания заглушек я использую следующее: wsimport -extension -keep -verbose MDFeRecepcaoSinc.wsdl
и оно выдает только одно предупреждение: [ПРЕДУПРЕЖДЕНИЕ] Порт SOAP «MDFeRecepcaoSincSoap12»: США привязывают SOAP 1.2 к использованию. строка 40 в файле:/home/teste-progra/tiago/backup/mdfe/wsimport-test/MDFeRecepcaoSinc.wsdl (это означает, что порт, используемый веб-службой, не использует традиционную (или по умолчанию) привязку для SOAP 1.2 и имеет отношение к следующей строке в wsdl: Однако я не уверен, что это имеет какую-либо пользу, поэтому соединение фактически сохраняется.
Изменить 3:< /strong> Я могу успешно прочитать HTTP-запрос и ответ с помощью System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");
и его содержание следующее:

Код: Выделить всё

---[HTTP request - https://mdfe.svrs.rs.gov.br/ws/MDFeRecepcaoSinc/MDFeRecepcaoSinc.asmx]---
Accept: application/soap+xml, multipart/related
Content-Type: application/soap+xml; charset=utf-8;action="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc/mdfeRecepcao"
User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mdf="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc"><soap:Header/><soap:Body><mdf:mdfeDadosMsg>?</mdf:mdfeDadosMsg></soap:Body></soap:Envelope>--------------------

---[HTTP response - https://mdfe.svrs.rs.gov.br/ws/MDFeRecepcaoSinc/MDFeRecepcaoSinc.asmx - 200]---
null: HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 586
Content-Type: application/soap+xml; charset=utf-8
Date: Fri, 27 Sep 2024 18:54:54 GMT
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
143RS20240710093839244Rejeição: Falha na descompactação da área de dados--------------------
Итак, я фактически получаю контент под тегом retMDFe! Я просто не могу правильно сопоставить его с MdfeRecepcaoResult.
Я попытался установить возвращаемый результат WS как строку, чтобы можно было распечатать его напрямую, но это дало пустой результат.

Код: Выделить всё

    @WebMethod(action = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc/mdfeRecepcao")
@WebResult(name = "mdfeRecepcaoResult", targetNamespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc", partName = "mdfeRecepcaoResult")
public String mdfeRecepcao(
@WebParam(name = "mdfeDadosMsg", targetNamespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc", partName = "mdfeDadosMsg")
String mdfeDadosMsg);
Какой класс фактически реализует этот интерфейс?>

Подробнее здесь: https://stackoverflow.com/questions/790 ... ap-request
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получение нулевого результата по запросу SOAP
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Получение нулевого результата по запросу SOAP
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Получение нулевого результата по запросу SOAP
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Получение нулевого результата по запросу SOAP
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Получение нулевого результата по запросу SOAP
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»