Java Web 服务返回带有 > 和 < 而不是 > 和 < 的字符串

2023-11-27

我有一个返回字符串的 java web 服务。我正在创建这个 xml 字符串的主体DocumentBuilder and Document班级。当我查看返回的 XML 源(在浏览器窗口中看起来很好)而不是 时,它返回&lt; and &gt;围绕 XML 节点。

请帮忙。

****更新(包括代码示例)
该代码不包含任何错误捕获,为了简单起见,它被删除了。 包含一个代码块和三个方法: 第一个代码块(示例设置)显示了 Document 对象设置的基础知识。方法appendPayment(...)是实际文档构建发生的地方。它调用两个辅助方法getTagValue(...) and prepareElement(...)
**注意,此代码旨在从预先存在的 xml 字符串中复制特定部分,xmlString,并获取稍后返回的必要信息。

****更新2在问题末尾添加回复

************ 第一个答案的后续问题在这里:
如何使用 Eclipse/AXIS2 POJO 服务返回任意 XML 文档

EXAMPLE SETUP
{
    //create new document
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder newDocBuilder = docFactory.newDocumentBuilder();
    Document newDoc = newDocBuilder.newDocument();
    Element rootElement = newDoc.createElement("AllTransactions");

    newDoc.appendChild(rootElement);
    appendPayment(stringXML, newDoc);
}

public static void appendPayment(String xmlString, Document newDoc) throws Exception
{
    //convert string to inputstream
    ByteArrayInputStream bais = new ByteArrayInputStream(xmlString.getBytes());
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document oldDoc =   docBuilder.parse(bais);
    oldDoc.getDocumentElement().normalize();            

    NodeList nList = oldDoc.getChildNodes();
    Node nNode = nList.item(0);
    Element eElement = (Element) nNode;

    //Create new child node for this payment
    Element transaction = newDoc.createElement("Transaction");
    newDoc.getDocumentElement().appendChild(transaction);


    //status
    transaction.appendChild(prepareElement("status", eElement, newDoc));

    //amount
    transaction.appendChild(prepareElement("amount", eElement, newDoc));
}

private static String getTagValue(String sTag, Element eElement)
{
    NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
    Node nValue = (Node) nlList.item(0);
    return nValue.getNodeValue();
}

private static Element prepareElement(String sTag, Element eElement, Document newDoc)
{
    String str = getTagValue(sTag, eElement);
    Element newElement = newDoc.createElement(sTag);
    newElement.appendChild(newDoc.createTextNode(str));
    return newElement;
}

最后我用下面的方法来转换最终的Document反对String

public static String getStringFromDocument(Document doc)
{
    try
    {
       DOMSource domSource = new DOMSource(doc);
       StringWriter writer = new StringWriter();
       StreamResult result = new StreamResult(writer);
       TransformerFactory tf = TransformerFactory.newInstance();
       Transformer transformer = tf.newTransformer();
       transformer.transform(domSource, result);
       return writer.toString();
    }
    catch(TransformerException ex)
    {
       ex.printStackTrace();
       return null;
    }
}

响应的头部类型如下

Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked

这是一个响应示例

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <getTransactionsResponse xmlns="http://services.paypal.com">
        <getTransactionsReturn>&lt;AllTransactions&gt;&lt;Transaction&gt;&lt;status&gt;PENDING&lt;/status&gt;&lt;amount&gt;55.55&lt;/amount&gt;&lt;/transaction&gt;
        </getTransactionsResponse>
    </soapenv:Body>
</soapenv:Envelope>

框架正在做你告诉它的事情;你的方法返回一个String这意味着生成的 WSDL 应该有一个类型的响应消息<xsd:string>。众所周知,XML 字符串必须将某些字符编码为字符实体引用 (i.e. "<“成为”&lt;" 因此 XML 解析器将其视为字符串,而不是您想要的 XML 元素的开头)。如果您想返回 XML 文档,那么您必须在WSDL <types> section并将响应消息部分设置为适当的元素。

换句话说,您试图在不使用 SOAP/WSDL 提供的强类型系统(即 XML 模式)的情况下发送“类型化”数据;这通常被认为是糟糕的设计(参见松散类型与强类型 Web 服务).

最终的解决方案是通过适当的方式定义响应文档XML模式。如果没有设置模式(根据您的服务的设计),则使用<xsd:any>type 为消息响应类型,虽然这种方法有其陷阱。此外,这种重新设计意味着模式优先(自上而下)的开发模型,并且从评论流看来,您目前正在实践代码优先(自下而上)的方法。也许您的工具提供了一种机制,例如“通用 XML 文档”返回类型或注释,可以达到相同的效果。

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

Java Web 服务返回带有 > 和 < 而不是 > 和 < 的字符串 的相关文章

  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 强制 WCF 在进入实际函数之前对每个请求调用一个方法

    我有一个具有许多不同功能的 RESTful WCF 服务 对于每个函数 我需要调用我编写的身份验证方法 我可以在每个请求上手动调用此方法 但我一直在寻找一种方法来强制 WCF 引擎在输入这些函数之前调用此方法 有谁知道这是否可能 Cheer
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn

随机推荐

  • 是否可以基于 MySQL 中的列之一进行选择插入?

    以下插入是否基于 MySQL 中可能的列之一的选择 INSERT INTO student fees id name fees VALUES 1 SELECT name from students where student id 1 20
  • 如何在 AWS ElasticBeanstalk 和 Nginx 上使用 OAuth2 的 Spring Boot 应用程序上强制使用 SSL?

    我正在尝试使用参考文档强制使用 SSL https docs spring io spring boot docs current reference html howto security html howto enable https
  • 如何实现可取消的事件?

    在 System ComponentModel 中 有一个名为 CancelEventArgs 的类 其中包含可以在事件侦听器中设置的 Cancel 成员 MSDN 上的文档解释了如何使用它来取消侦听器内的事件 但如何使用它来实现我自己的可
  • 如何在 Windows 应用程序中启用常用控件

    我正在尝试在应用程序中启用通用控件 我按照中给出的步骤进行操作这篇 MSDN 文章 特别是该部分在仅使用标准扩展的应用程序中使用 ComCtl32 dll 版本 6 但我无法让它发挥作用 我做的唯一与本文不同的事情是我将清单信息添加到项目属
  • UIViewController viewDidLoad 宽度/高度不正确

    每个人都知道你不能相信 UIViewController init viewDidLoad 方法上的帧大小 这 void viewDidLoad NSLog d self view frame size width 在很多情况下会打印错误的
  • Spring Reactive 使用 ServerRequest 获取正文 JSONObject

    我是春季反应新手 我正在尝试使用邮递员从服务器获取请求信息 首先 postman使用post方法向服务器发送信息 其次 我们一直在服务器端编写相关代码并获取请求信息 在下面的代码片段中 我想知道是否可以获取ServerRequest函数的J
  • 隐藏命令行上的输入

    我知道像 Git 和其他这样的命令行界面能够隐藏用户的输入 对密码很有用 有没有办法在 Java 中以编程方式执行此操作 我正在从用户那里获取密码输入 我希望他们的输入 隐藏 在该特定行上 但不是所有行上 这是我的代码 尽管我怀疑它会有帮助
  • 如何使用高阶函数求对角线的总和?

    考虑以下二维数组 let array 11 2 4 4 5 6 10 8 12 我想要得到的是对角线的总和 As firstDiagnal 11 5 12 4 As secondDiagnal 4 5 10 19 我可以使用标准来实现它fo
  • 使用 Gunicorn 服务时 Flask 超时

    我有一个可以将音频文件转换为文本的应用程序 使用烧瓶和烧瓶插座 当我使用 python run py 运行它时 它工作得很好 但是当我使用 gunicorn k eventlet b 0 0 0 0 5000 run app 运行它时 它将
  • 如何使对话框(视图)在与主窗口相同的监视器上打开

    在具有多个显示器的 PC 中 假设您运行的应用程序除了主窗口 例如选项 之外还有第二个窗口 对话框 您希望它在与您的计算机相同的屏幕 显示器中打开MainWindow 如何强制这种行为 你基本上想要阻止你的场景MainWindow在一台显示
  • git 是否需要存在于服务器上才能使用它?

    当我开始使用 git 时 我的同事告诉我的最显着的好处之一是git 不需要出现在服务器上反对svn 但这真的是真的吗 在另一个线程我读到至少有一个git upload pack or git receive pack将是必要的 另一方面 我
  • 如何在使用 Chrome 浏览器的 Selenium Web 驱动程序执行自动化测试时绕过 NTLM 身份验证弹出窗口?

    我使用以下 python 代码绕过 NTLM 弹出窗口 chromedriver webdriver Chrome executable path chromedriver path chrome options options chrom
  • maxItemsInObjectGraph 被忽略

    我的 WCF 服务出现问题 该服务尝试序列化过多的数据 从跟踪中我收到一个错误 指出可以序列化或反序列化的最大元素数为 65536 请尝试增加 MaxItemsInObjectGraph 配额 所以我去修改了这个值 但它只是被忽略了 错误是
  • 创建自定义 PSObject PowerShell 2.0

    是否可以创建一个自定义对象 PSObject 并在程序执行之前和之后定义其属性 我们不断向该对象添加值数组 For e g c c New Object PSObject c Add Member type NoteProperty nam
  • emacs 字符串插入矩形数字向量?

    如何使用 emacs string insert rectangle 操作将数字向量添加到一系列行中 例如 我的 emacs 缓冲区中有一堆文本条目的缩短版本 element01 8 1111111110110100001000000011
  • C++、OpenCV:调整大小时断言失败

    作为一名 C 初学者 我目前面临着一个我无法解决的问题 即使代码非常简单 我一直在寻找answers互联网上到处都是 但没有一个适用于我的问题 我目前正在 VS2013 下使用 OpenCV 2 4 8 用 C 编写基本的 SVM 我能够处
  • OpenSSL::SSL::SSLContext SNI servername_cb 不工作

    正如中所引用的OpenSSL X509 证书显示错误域名的证书 我需要使用 TLSv1 或更高版本and 服务器名称指示扩大 即使ssl version and servername cb通过设置SSLContext 我仍然收到错误的证书m
  • 动态创建一个继承自ActiveRecord的类?

    我希望能够动态创建继承自 ActiveRecord 的类 以便在 Rails 应用程序外部编写脚本 我被困在这样的事情上 require active record def create arec table name Class new
  • 如何在graphql和strapi中传递JSON对象

    当我手动编写突变查询 在 graphql 插件中 时 它正在工作 mutation createExam input data name myName desription ggg questions gf hello time 2 sub
  • Java Web 服务返回带有 > 和 < 而不是 > 和 < 的字符串

    我有一个返回字符串的 java web 服务 我正在创建这个 xml 字符串的主体DocumentBuilder and Document班级 当我查看返回的 XML 源 在浏览器窗口中看起来很好 而不是 时 它返回 lt and gt 围