gpt4 book ai didi

jax-ws - 删除 JAX-WS SOAP 响应中的元素

转载 作者:行者123 更新时间:2023-12-02 11:33:43 30 4
gpt4 key购买 nike

我有以下 JAX-WS 方法

public School createUpdateSchool(Perks reqeustData, DataHandler contentData)
{
----
----
}

在我的 SOAP 响应中,

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns3:CreateUpdateSchoolResponse xmlns:ns2=".........">
<return>
<ns2:Student name="Raj" ......
<ns2:Exam pattern="CBSE"............
............
</return>
</ns3:CreateUpdateSchoolResponse>
</S:Body>
</S:Envelope>

事实上,我可以自定义该元素,但无法将其从肥皂响应中完全删除。

  • 是否可以通过某些配置来删除它?
  • 如果没有,至少如何通过 SOAP 处理程序来做到这一点?

任何帮助将不胜感激。

最佳答案

我有同样的问题,并且找不到其他方法来删除服务响应的标记返回,我找到的唯一方法是实现 SOAP Handler,如下所示:

希望这有帮助,祝你好运!

import java.util.Iterator;
import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.soap.Node;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

import org.w3c.dom.NodeList;

import com.millicom.LoggerFFE;
import com.millicom.fulfillment.ws.cin.utils.ConnectorsLoggerUtil;

/**
* @author jcperez
*
*/
public class SOAPLoggingHandler implements SOAPHandler<SOAPMessageContext> {

protected static LoggerFFE logger=ConnectorsLoggerUtil.getLogger(SOAPLoggingHandler.class);

@Override
public boolean handleMessage(SOAPMessageContext context) {

Boolean outboundProperty = (Boolean) context
.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

//Verificamos solo los mensajes de salida
if(outboundProperty){

try {
//Obtenemos el mensaje
SOAPMessage message = context.getMessage();

//Obtenemos los elementos del cuerpo
@SuppressWarnings("unchecked")
Iterator<Node> it = message.getSOAPBody().getChildElements();

//Obtenemos el primero nodo, el que corresponde al response de la operacion
Node node = (Node) it.next();

//Obtenemos el nodo return
org.w3c.dom.Node returnNode = node.getChildNodes().item(0);
//Obtenemos los nodos hijos en una varaible temporal
NodeList nodeList = returnNode.getChildNodes();
//Eliminamos el nodo return
node.removeChild(returnNode);
//Agregamos los hijos del nodo return al nodo response de la operacion
while(nodeList.getLength() > 0){
node.appendChild(nodeList.item(0));
}

} catch (SOAPException e) {
logger.error("SOAPLoggingHandler#handleMessage(context) Error al obtener el body del mensaje SOAP ", e);
} catch (Exception e) {
logger.error("SOAPLoggingHandler#handleMessage(context) Error general ", e);
}

}

return true;
}

@Override
public boolean handleFault(SOAPMessageContext context) {
//do nothing
return true;
}

@Override
public void close(MessageContext context) {
//do nothing
}

@Override
public Set<QName> getHeaders() {
return null;
}

}

关于jax-ws - 删除 JAX-WS SOAP 响应中的元素 <return>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293672/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com