java - xml 的有效 xs 类型是什么 - 无效的 xml 字符

标签 java xml web-services soap endpoint

我正在尝试开发一个端点,它应该接受 xml 数据并用它生成 pdf。我创建了用于生成 JAXB 类 的 xsd 文件,并将请求的 xs 类型声明为如下字符串:

<xs:element name="producepdf-request">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="xmlData" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
</xs:element>

但是当我将 xml 数据作为 String 传递到此端点时,会有大量无效的 xml 字符导致 IOException。我创建所需的 xml 数据来调用此端点,如下所示:

File xmlDocument = new File("C:\\Users\\stu\\Desktop\\fileName.xml");
String xmlData = FileUtils.readFileToString(xmlDocument, "UTF-8");

并清除无效字符:

String xml10pattern = "[^"
                    + "\u0009\r\n"
                    + "\u0020-\uD7FF"
                    + "\uE000-\uFFFD"
                    + "\ud800\udc00-\udbff\udfff"
                    + "]";
xmlData  = xmlData.replaceAll(xml10pattern, "");

然后将其传递到端点。问题是我仍然会因无效字符而出现异常。那么解决这个问题的更好方法是什么?是否有一种类型可以在 xsd 级别声明 request 类型,以便我不必担心无效字符,或者是否有更好的方法来读取 xml 文件从文件系统? 谢谢。

最佳答案

恕我直言,如果不修改 WSDL 来处理 XML 文件的架构,则无法将其设置为 XML。

共有三个选项:

1,修改您的 WSDL 并将 XML 文件的架构集成到其中,然后在创建 SOAP 请求时,将 XML 文件的内容复制到请求中(我的意思是不是作为字符串,解析它并从节点到节点(或者尝试反序列化根元素的复杂类型,该根元素也应该在 WSDL 的 WSDL/XSD 中定义,但这确实不容易在 SOAP 请求中实现)。

2,修改您的 WSDL,启用 MTOM 并将您的文件添加为附件(这是最有效的上传方式,而且我认为您的编码是安全的)

3,使用原始的 WSDL,如果您的 xml 有 xs:string 字段,请将整个 xml 读取为字符串(就像您在帖子中所做的那样),然后对其进行 Base64 编码(使用一些定义的编码)并在服务器 stub 使用相同定义的编码对其进行解码。

关于java - xml 的有效 xs 类型是什么 - 无效的 xml 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52096443/

相关文章:

java - 如何使用 mapreduce 批量更新满足查询的数据存储实体?

java - 在java中使用日历设置时区

xml - Spring:java.util.Locale 类型的 bean 的 Autowiring 似乎不起作用

java - 如何从 WSDL 文件生成 java 类

xml - GZIP Deflate 与 CURL(PHP) Web 服务问题

java - 交付启动 MySQL 的 java 应用程序(独立应用程序)

java - 如何使用java代码在eclipse的控制台中插入值

xml - SoapUI:在一个断言中有多个预期结果

php - 使用 CKeditor 的 enterMode 插入的额外空格 - 导致 XML 文档出现问题

java - 如何使用 JAVA 在 CXF Restful Web 服务中包含异常处理机制