Как распаковать ответ SOAP с помощью JAXB, если объявление пространства имен находится в конверте SOAP?

JAXB может распаковать XML только в том случае, если мыльный конверт уже удален. Однако ответ SOAP, который я пытаюсь разобрать, имеет объявление пространства имен на мыльном конверте. Если я удалю мыльный конверт, объявление пространства имен также будет удалено. Таким образом, префикс тегов не будет ссылаться на none. Это приводит к тому, что JAXB выдает ошибку. Как я могу распаковать ответ SOAP с помощью JAXB, если пространство имен объявлено в конверте SOAP?

Аналогичный образец XML, который мне нужно распаковать, приведен ниже:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://example.com/">
    <soapenv:Body>
        <ns:getNumberResponse>
            <number>123456789</number>
        </ns:getNumberResponse>
    </soapenv:Body>
</soapenv:Envelope>

Вот что будет, если я уберу мыльный конверт:

<ns:getNumberResponse>
    <number>123456789</number>
</ns:getNumberResponse>

Если я удалю мыльный конверт, объявление пространства имен также исчезнет. JAXB не сможет распаковать приведенный выше xml, потому что отсутствует определение пространства имен для префикса «ns». Таким образом, он вернет сообщение об ошибке "The prefix "ns" for element "ns:getNumberResponse" is not bound.". Как это исправить?

Обратите внимание, что я использую JDK 1.5. Я не уверен, есть ли способ решить эту проблему в JDK 1.6. Я смог использовать JAXB, потому что загрузил необходимые файлы jar для использования JAXB.

19
задан Arci 13 July 2012 в 07:19
поделиться