Java - ошибка Пространство имен, отличное от заданного по умолчанию, не может сопоставиться с пустым URI в документах XML 1.0

1

Я пытаюсь вызвать веб-сервис в Java. В основном я следил за этой ссылкой, а также я решил несколько проблем с google и другими вопросами stackoverflow. Однако я получаю сообщение об ошибке, которое я не могу решить:

Exception in thread "main" javax.xml.ws.WebServiceException: javax.xml.stream.XMLStreamException: Non-default namespace can not map to empty URI (as per Namespace 1.0 # 2) in XML 1.0 documents

Я думаю, что проблема в том, что я создал xml, но я хорошо вижу.

Запрос SOAPUI:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:acc="http://url/acceso">
   <soapenv:Header/>
   <soapenv:Body>
      <acc:petitionSession>
         <acc:codUser/>
         <acc:pass>?</acc:pass>
         <acc:codOp>?</acc:codOp>
      </acc:petitionSession>
   </soapenv:Body>
</soapenv:Envelope>

Запрошенный запрос:

   <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:acc="http://url/acceso">
    <SOAP-ENV:Header/>
        <SOAP-ENV:Body>
            <acc:petitionSession>
                <acc:codUser/>
                <acc:pass>user1</acc:pass>
                <acc:codOp>Temp1</acc:codOp>
            </acc:petitionSession>
        </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Код:

Диспетчер отправки = getDispatcher (wsdlLocation, namespace, serviceName, portName);

dispatcher.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
dispatcher.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, soapActionUri);

......

 public static SOAPMessage construirMensaje() throws SOAPException, IOException{

        MessageFactory factory = MessageFactory.newInstance();
         SOAPMessage soapMsg = factory.createMessage();
         SOAPPart part = soapMsg.getSOAPPart();

         SOAPEnvelope envelope = part.getEnvelope();
         envelope.addNamespaceDeclaration("acc", "http://url/acceso");
         SOAPHeader header = envelope.getHeader();
         SOAPBody body = envelope.getBody();

         SOAPBodyElement element = body.addBodyElement(envelope.createName("petitionSession", 
                 "acc", null));
         element.addChildElement(body.addBodyElement(envelope.createName("codUser", 
                 "acc", null)));

         SOAPBodyElement pass = body.addBodyElement(envelope.createName("pass", 
                 "acc", null));
         pass.addTextNode("user1");
         element.addChildElement(pass);

         SOAPBodyElement codOp = body.addBodyElement(envelope.createName("codOp", 
                 "acc", null));
         codOp.addTextNode("Temp1");
         element.addChildElement(codOp);

         soapMsg.writeTo(System.out);

         FileOutputStream fOut = new FileOutputStream("SoapMessage.xml");
         soapMsg.writeTo(fOut);

         System.out.println();

         return soapMsg;

    }

Есть идеи?

С уважением.

  • 0
    Я нахожу проблему, которая была в шапке.
Теги:
soap

1 ответ

0
Лучший ответ

Я нашел проблему, которая была в заголовке, что она не была хорошо построена. Необходимо добавить:

MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", serverURI  + "name");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню