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

2023-12-23

我有以下 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;
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除 JAX-WS SOAP 响应中的元素 的相关文章

随机推荐

  • 当上一个 api 成功完成后,如何对 api 进行新的调用?

    我是 Angular 和 rxjs 的新手 我有以下场景 在该场景中 我需要在成功解析对 api 的调用后进行新的调用 在 Angular rxjs 的上下文中我不知道该怎么做它 handler void this serviceNAme
  • 寻找 DNA Java 的超序列

    我正在努力研究 查找超序列 算法 输入用于一组字符串 String A caagccacctacatca String B cgagccatccgtaaagttg String C agaacctgctaaatgctaga 结果将是正确对齐
  • php 日期格式正则表达式检查

    我正在尝试验证日期字段 YYYYMMDD 使用 PHP 正则表达式 我尝试了这样的方法 0 9 4 0 9 2 0 9 2 但在这个中 它将接受任何两位数字 例如 MM 或 DD 的 01 99 但我希望有 MM 的 01 12 和 DD
  • Adobe AIR 应用程序的 Jenkins CI 服务器设置(使用 FlexUnit4 和 GitHub 作为存储库)

    我有一个用 Robotlegs 1 5 2 编写的 Adob e AIR 应用程序 使用的单元测试框架是FlexUnit4 我已经为使用 CakePHP 2 x 和 PHPUnit 单元测试框架编写的项目设置了 Jenkins CI 我的
  • Libusb 以及如何在 Ubuntu 中使用它的软件包

    我已经使用以下命令安装了 libusb 我不确定这是否正确 命令是 sudo apt get install libusb dev 一旦我安装了 我不确定它是否已经安装 因为我是 Ubuntu 的新手用户 我想知道如何使用该库 因为我编写了
  • 如何处理 CMake 中的递归依赖关系

    假设我有包 A B 和 C 包 B 使用包 A 包 C 使用包 B 我创建共享库 所以在包 B 中我做了类似的事情 find package A if A FOUND target link libraries B A LIBRARIES
  • 在c#中将对象的克隆添加到列表中(防止外部修改)

    我有一个像 obj1 我想将其添加到列表中 我可以通过添加它list1 add obj1 现在一旦我更新obj1 我的列表中的对象也在更新 我知道我在这里处理参考文献 我的要求需要修改obj1并再次将其添加到列表中 我没有两个不同的对象 而
  • Pandas concat 产生 ValueError:计划形状未对齐

    在 pandas 中 我尝试连接一组数据帧 但收到此错误 ValueError Plan shapes are not aligned 我的理解 concat 是它会连接相同的列 但对于那些找不到的列 它将用 NA 填充 这里的情况似乎并非
  • 没有 WHERE 的 PostgreSQL 查询仅 ORDER BY 和 LIMIT 不使用索引

    我有一个表 其中包含 BIGSERIAL 类型的 id 列 我也有这一列的索引 降序排序 BTREE 唯一 我经常需要从包含数百万条目的表中检索最后 10 20 30 个条目 如下所示 SELECT FROM table ORDER BY
  • Task.Delay在等待时会浪费系统资源吗?

    我正在尝试定期运行一段代码 中间有时间间隔 可能有多个这样的代码片段同时运行 所以我转向Task Run利用异步方法调用和并行性 现在我想知道我应该如何实现时间间隔 直接的方法是使用Task Delay像这样 var t Task Run
  • 如何用 joda 时间解析“YYYY-MM-DD”

    我正在尝试使用 joda time 来解析以下形式的日期字符串YYYY MM DD 我有这样的测试代码 DateTimeFormatter dateDecoder DateTimeFormat forPattern YYYY MM DD D
  • 获取重复数组值的数组

    我有一个数组 正在其中测试重复值 我想获取仅包含重复值的数组 以便向用户提供错误消息 并指出哪些是有问题的值 我试过 duplicates array diff array with dupes array unique array wit
  • MD5 整个节点以及校验和

    我有一个业务需求 将 Request 标签和子节点放入CDATA或xml字符串中 放入 arg0 元素 Concat
  • 我可以在运行时确定 Java 库的版本吗?

    是否可以在运行时确定第三方 Java 库的版本 第三方Java库是指Jar文件 Jar文件清单具有专门用于指定库版本的属性 注意 并非所有 Jar 文件实际上都指定了版本 即使它们should Java内置的读取该信息的方式是使用反射 但你
  • 找不到命令“git”-Windows

    我正在尝试使用我的 python django 应用程序安装 mongodb engine 但是我收到此错误 Cannot find command git 我正在尝试 mongodb 文档中的这个命令 http django mongod
  • 如何在反应应用程序中令牌过期时注销用户

    我正在开发一个使用 React 作为前端的应用程序React apollo graphql用于我的 API 调用 我在用react hooks即在 React 16 8 中 我在做什么 我创建了一个auth js当用户登录时我存储我的值的文
  • 如何告诉plugman我想要更新一个可能不存在的文件?

    我编写了一个 Android PhoneGap 3 插件 它启动一个 Activity 该 Activity 是插件的一部分 并使用本机 Android UI 现在我想遵循插件规范 http docs phonegap com en 3 0
  • Hubot Slack 机器人可以存储会话吗

    我正在尝试实现简单的松弛机器人 所以我已经配置了hubot这将从以下位置获取输入slack并将其传递给我的网络应用程序 django app 并且它将采取任何响应django app并会回复松弛 在此过程中 我尝试将会话存储在django
  • 使用任务库的 Amazon S3 异步上传

    我有一个将文件上传到 Amazon S3 的 Windows 表单 我尝试实现内置的异步方法 但似乎工作不正常 所以我认为最好的方法是实现 System Threading Tasks 我的实际代码如下所示 public void Uplo
  • 删除 JAX-WS SOAP 响应中的元素

    我有以下 JAX WS 方法 public School createUpdateSchool Perks reqeustData DataHandler contentData 在我的 SOAP 响应中