Отправка SOAP-сообщения - PullRequest
0 голосов
/ 08 февраля 2012

Я пытаюсь отправить сообщение SOAP.

Я добавляю заголовок сообщения вручную, используя следующий код:

    public static void main(String[] args) {
    try{
        AmdocsServicesServiceagentLocator locator = new AmdocsServicesServiceagentLocator();
        PortTypeEndpoint1BindingStub port = new PortTypeEndpoint1BindingStub(new URL("http://srvp7rd-tibco.rnd.local:8025/Process/SoapRequests/Amdocs-Services.serviceagent/PortTypeEndpoint1"),locator);
        GetContactRelatedInfo parameters = new GetContactRelatedInfo();
        GetContactRelatedInfoRequest request = new GetContactRelatedInfoRequest();
        request.setPersonID("6610782925");
        request.setPersonIDType("ID number (CPR)");

        /* Creating an empty XML Document - We need a document*/

        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
        Document doc = docBuilder.newDocument();

        /* Creating the XML tree */

        /* Create the root element and add it to the document */
        Element root = doc.createElement("mul:MultiTenant");
        doc.appendChild(root);

        /* Adding the child to the root */
        Element child = doc.createElement("mul:OpCo");
        root.appendChild(child);

        /* Add text element to the child */
        Text text = doc.createTextNode("DENMARK");
        child.appendChild(text);

        /* Adding the child to the root */
        child = doc.createElement("mul:BS");
        root.appendChild(child);

        /* Add text element to the child */
        text = doc.createTextNode("ENV3");
        child.appendChild(text);

        SOAPHeaderElement element = new SOAPHeaderElement("" ,"soapenv:Header" , doc);
        element.setActor(null);
        port.setHeader(element);
        System.out.println(port.getHeaders()[0]);
        port.getContactRelatedInfoOperation(parameters);
    } catch (Exception e){
        e.printStackTrace();
    }
}

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

<soapenv:Header soapenv:mustUnderstand="0" xsi:type="ns1:Document"
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:ns1="http://xml.apache.org/xml-soap">
 <mul:MultiTenant xmlns:mul="">
          <mul:OpCo xmlns:mul="">DENMARK</mul:OpCo>
          <mul:BS xmlns:mul="">ENV3</mul:BS>
 </mul:MultiTenant></soapenv:Header>

Например, атрибут xmlns:mul="" в теге mul:OpCo.Есть ли способ удалить этот атрибут?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Ваше сообщение не имеет объявления пространства имен mul. Добавьте его, и странные атрибуты xmlns:mul должны исчезнуть.

Обновление

Теперь я понимаю, вы просто создаете фрагмент мыльного сообщения. Это всего лишь заголовок, и пространство имен mul может быть объявлено в другом элементе SOAP-Envelope.

Вам необходимо , чтобы узнать пространство имен (-name) mul, дважды проверить полное сообщение SOAP в soapUI и дважды проверить документацию. Затем объявите пространство имен на doc. Позже, если внешний элемент объявляет mul точно так же, атрибуты должны исчезнуть из сериализованного xml.

1 голос
/ 08 февраля 2012

Это не атрибуты, это объявления пространства имен.Вы создаете элементы с префиксом пространства имен mul:, и этот префикс должен быть где-то определен.Java добавляет пустое объявление по умолчанию (xmlns:mul="") только для того, чтобы ваш XML в конечном итоге был правильно сформирован - вы не можете использовать префикс, не объявив его.

Если вы не хотите этих объявлений,затем удалите префикс mul: или определите его правильно в другом месте документа.Вы еще не сказали нам, как должен выглядеть ваш документ, поэтому вам сложно посоветовать, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...