Как удалить префикс и пространство имен в SOAPElement?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как удалить префикс и пространство имен в SOAPElement?

Сообщение Anonymous »

Коллеги, у меня есть цикл создания мыльного xml с необходимой структурой (о структуре не спрашивайте)

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

log.info("Body elements: ");
NodeList nodeList = body.getElementsByTagName("*") ;
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
log.info(node.getNodeName());

if (node.getNodeName().equals("ns2:request")) {
log.info("Set namespace and prefix for " + node.getNodeName());
SOAPElement childX = (SOAPElement) node;
childX.removeNamespaceDeclaration(childX.getPrefix()) ;
childX.addNamespaceDeclaration("ns3", "http://mayacomp/Generic/Ws");
childX.setPrefix("ns3");
}

else {
if (node.getNodeName().equals("ns2:in") ) {
log.info("Remove namespace for  " + node.getNodeName());
SOAPElement childX = (SOAPElement) node;
childX.removeNamespaceDeclaration(childX.getPrefix()) ;
childX.addNamespaceDeclaration("", "");
childX.setPrefix("");
}

SOAPElement childX = (SOAPElement) node;
childX.removeNamespaceDeclaration(childX.getPrefix()) ;
childX.setPrefix("");
}
}
}
В результате я получаю xml:
Мой вопрос заключается в том, как удалить только xmlns="http://mayacomp/Generic/Ws" из элемента и получить:
ОБНОВЛЕНИЕ

Я пытался настроить элемент XML:

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

    /*Config body elements*/
while (itBodyElements.hasNext())
{
Object o = itBodyElements.next();
SOAPBodyElement bodyElement = (SOAPBodyElement) o;
log.info("Elements from 'Body' element = " + bodyElement.getLocalName() );

Iterator it2 = bodyElement.getChildElements();
while (it2.hasNext())
{
Object requestElement = it2.next();
SOAPBodyElement bodyRequest = (SOAPBodyElement) requestElement;
log.info("  Elements from '"+ bodyElement.getLocalName() + "' element = " + bodyRequest.getLocalName());
log.info("  Delete namespace from IN element " + bodyRequest.getLocalName());
bodyRequest.removeNamespaceDeclaration(bodyRequest.getPrefix());
bodyRequest.setPrefix("");

Iterator it3 = bodyRequest.getChildElements();
while (it3.hasNext())
{ //work with other elements
Но это не влияет на элемент «in». После запуска у меня осталось: ОБНОВЛЕНИЕ

Я решил проблему, вызвав ws следующим образом:

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

getWebServiceTemplate().marshalSendAndReceive(
"URL",
request,
new WebServiceMessageCallback()
{ public void doWithMessage(WebServiceMessage message) {

SaajSoapMessage saajSoapMessage = (SaajSoapMessage)message;

SOAPMessage soapMessage = UtilsClass.createSOAPMessage(in);

saajSoapMessage.setSaajMessage(soapMessage);

}

}
);
Метод createSOAPMessage настраивает мыльное сообщение с использованием библиотеки javax.xml.soap.

Подробнее здесь: https://stackoverflow.com/questions/339 ... oapelement
Ответить

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

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

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

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

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