问题标签 [xop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 字节读取为 UTF8 字符串并转换为 Base64
请原谅这里冗长的设置,但我认为了解上下文可能会有所帮助......
我正在作为 WCF 服务的一部分实现自定义数字签名验证方法。我们使用自定义方法是因为对某些行业标准的各种不同解释,但其中的细节并不那么相关。
在这个特定场景中,我收到一个 MTOM/XOP 编码请求,其中根 MIME 部分包含一个数字签名,并且签名 DigestValue 和 SignatureValue 片段被拆分为单独的 MIME 部分。
包含签名 DigestValue 和 SignatureValue 数据的 MIME 部分是二进制编码的,因此它实际上是 Web 请求中的一堆原始字节,如下所示:
我正在将消息的内容作为字符串读取(使用默认的 UTF8 编码),如下所示(请参阅下面的 requestAsString 参数):
在我读入 MTOM/XOP 消息后,我试图将多个 MIME 部分重新组织成一个 SOAP 消息,其中签名 DigestValue 和 SignatureValue 元素恢复到原始 SOAP 信封(而不是作为附件)。所以基本上我正在解码 MTOM/XOP 请求。
不幸的是,我无法正确阅读 DigestValue 和 SignatureValue 片段。我需要从消息中读取字节并获取该数据的 base64 字符串表示。
尽管有上述所有内容,但核心问题似乎是将二进制数据作为字符串(UTF8 编码)读取,然后将其转换为适当的 base64 表示。
这是我在测试代码中看到的:
这是我的示例 base64 字符串:
然后我可以得到那个字符串的字节表示。这会产生一个 20 字节的数组:
然后我得到这些字节的 UTF8 编码版本:
现在奇怪的部分......如果我将字符串转换回字节,如下所示,我得到一个 39 字节长的字节数组:
所以很明显在这一点上,当我转换回base64字符串时,它与原始值不匹配:
base64StringBack 设置为“77+977+9FzMO77+9eO+/ve+/ve+/vVbvv73vv703Mu+/vWAK77+9”
我在这里做错了什么?如果我切换到使用 UTF8Encoding.Unicode.GetString() 和 UTF8Encoding.Unicode.GetBytes(),它会按预期工作:
现在 base64StringBack 设置为 "mowXMw68eLSv9J1W7f43MvNgCrc=" 所以我似乎误用了 UTF8 编码,或者它的行为与我预期的不同。
java - 使用 JAXB 解组 XOP
我有一个数据源已从 base64 嵌入式图像数据切换到 XOP 图像数据。我正在使用 Java/JAXB 来解组数据,但找不到任何描述它是如何完成的好的来源。所有参考资料似乎都描述了使用 SOAP 消息执行此操作,这些消息似乎为您处理了一些繁重的工作。
在我的例子中,数据以字符串的形式有效地进入,需要将其解组到由 JAXB 创建的对象中。由于新消息以
显然它不会将数据解组为 XML,因为它看起来不像 XML(prolog 之前不允许数据)。
这可以用 JAXB 完成吗?从模式创建对象似乎工作正常,并创建了看起来像正确的对象(它创建了一个 Include 元素)。我已经尝试手动创建一个 AttachmentUnmarshaller,但它没有帮助......传入的数据仍然不能被识别为 XML。我觉得我错过了一个基本步骤,但找不到任何好的参考或示例。
任何帮助将不胜感激。
xml - 从soap响应字符串中提取PDF文件
问题:从soap响应字符串中提取PDF文件。
描述:我有以下响应由 webservice 返回并使用转换
它确实有 PDF,从 %PDF-1.4 开始。
我从未解析过 xop 内容。我只是尝试将它加载到 XDocument 中
并得到一个错误,它不是一个有效的 xml 文档。
现在我尝试使用 XmlDictionaryReader.CreateMtomReader 加载字符串 S 并查看是否允许我提取 PDF。
如果需要任何其他细节,请告诉我。任何帮助深表感谢。
此致。
c# - 如何从 XOP/MTOM 响应下载附件
我们使用第三方服务以 xop 格式返回附件作为 Web 服务响应,如下所示
一旦我们得到响应,我们需要将文件转换为二进制并发送给对方。如何使用 C#.net 从上面的响应中下载文件。请问有什么指点吗?
python - eBay LMS uploadFile - 无法指定具有有效格式的文件
我正在尝试使用 eBay 大型商家服务 API 批量上传调用。这个 API 和文档是出了名的糟糕(我找到了一篇解释它的博客文章,并在这里反对它)。我能找到的最接近工作 Python 解决方案的方法是基于这个问题/答案和他不再维护的相关Github版本。
我非常密切地关注了这些示例,并且尽我所能告诉他们,它们从一开始就没有完全发挥作用。我给原作者发了电子邮件,他说它从未投入生产。但是它应该非常接近工作。
我的所有尝试都导致错误 11 请指定具有有效格式消息的文件。
我尝试了各种方法来构造这个调用,使用 github 方法或通过 email.mime 包的方法,以及通过 Requests 库和 http.client 库。下面的输出是我认为最接近应有的输出。附加的文件使用 Github 的示例XML 文件,它使用与Github存储库中相同的方法进行读取和压缩。
对此的任何帮助将不胜感激。我觉得我已经用尽了我的可能性。
编辑:显示我尝试实际生成二进制数据的方法:
EDIT2,准解决方案: Python 实际上并没有发送二进制数据,而是二进制的字符串表示形式,它不起作用。我最终不得不先对文件进行base64编码。我之前曾尝试过,但被 eBay 论坛上的建议放弃了。我刚刚将最后一个标题更改为Content-Transfer-Encoding: base64
,我得到了成功响应。
EDIT3,真正的解决方案: Base 64 编码仅解决了我对示例 XML 文件的问题。我发现我自己的 XML 有效负载没有成功发送(与以前相同的错误),但 Github 上的脚本可以发送相同的文件就好了。不同之处在于 Github 脚本是 Python2 并且能够无差别地混合字符串和二进制数据。要在 Python3 中发送二进制数据,我只需进行一些简单的更改,将 request_part 和 binary_part 中的所有字符串更改为字节,以便 gzip 有效负载中的字节与其连接。看起来像这样:
所以,没有base64编码,只需要弄清楚如何让Python发送真正的二进制数据。原始的 github repo确实像宣传的那样在 python2 中工作。
java - 如何使用 Spring 将文档附加到带有 XOP 的 SOAP?
我有一个带有 MTOM 的 WSDL,我们可以正确处理它:有可用的文档。这就是我们最终的结果。除了我们看到它工作之外,没有对其进行太多测试。
现在基础设施人员将我们的 XSD 更改为使用 XOP,因为请求中的附件是可以的,而不是我们实际用例的响应中的附件。所以他们改变了我们的 XSD 并添加了一个xop.xsd
.
有了这个新结构,该方法setDocument
现在定义如下setDocument(Include)
:
生成的Include
类基本如下:
我的问题是:如何以及在哪里添加该Include
对象中的文档?(文档是第一个代码片段中看到的字节数组)
jax-ws - 使用 JAX-WS 和 MTOM/XOP 重写“Content-Type”标头和 MIME 边界
我有一个需要遵守的规范,它在使用 MTOM/XOP 提供和使用 Web 服务时提出了一些相当不寻常的要求(出于历史原因):
总而言之,Content-Type HTTP Header 必须像这样编码: start-info 和 action 必须编码为 Content-Type 的单独参数:
start-info="application/soap+xml";action="urn:ihe:iti:2007:RetrieveDocumentSet"
- 与此相反,MTOM/XOP 规范要求:
Content-Type: multipart/related;start="...";type="application/xop+xml";boundary="...";start-info="application/soap+xml;action=\"urn:ihe:iti:2007:RetrieveDocumentSet\""
- 所以“action”被包含在“start-info”参数中并被转义。我们正在使用 JAX-WS 来提供和使用 Web 服务,我看不到更改标头和 MIME 边界以满足规范要求的有效解决方案。
这同样适用于随 Web 服务消息发送的 MIME 边界。
Java7 和 Java8 包含的 JAX-WS 实现似乎对此处理不同,即:Java7 按照我需要遵守的规范进行编码,而 Java8 根据 MTOM/XOP 规范进行编码。我无法返回 Java8,因为我正在使用的其他库需要 Java8
有没有办法修改 JAX-WS 的行为,或者在到达其他系统之前拦截和更改标头/MIME 边界?
android - 如何使用 SOAP/MTOM 发送视频文件
我想从我的 android 应用程序上传大尺寸视频,我正在使用 SOAP 服务与服务器通信,任何人都可以告诉我如何做到这一点,而无需将视频转换为Base64
编码字符串并在 SOAP 请求中将其发送到服务器,因为它非常效率低下。并且是否有任何库可用于执行此操作,例如用于发送 SOAP 请求/响应的 KSOAP2。
经过大量搜索后,我才知道 MTOM 用于将byte
数据发送到服务器,但如何在 android 中执行此操作却非常未知。
java - 手动解析 MTOM 消息
我有以下 mtom 响应作为字符串
我正在使用 CXF 单元测试代码来解析上述关于xop/mtom 解析的内容
附件始终为空,并且在执行 itr.next() 时;行,我得到异常 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
谢谢亲切的问候
java - SAAJ 与 MTOM + XOP 兼容吗?
我正在尝试使用 MTOM + XOP 在 Spring Web 服务中返回一个字节 [],但是当编组结果时,它会抛出一个带有消息的 SAXParseException:
cvc-type.3.1.2:元素'dataHandler'是一个简单类型,所以它必须没有元素信息项[children]。
似乎在编写 XOP 标记之后,验证器会遇到它,而不是它期望的 byte[] 内容,并抛出具有 FATAL 级别的 SAXParseException 来停止进程。
我正在使用:
- JDK 1.7
- SAAJ 1.3
- 肥皂 1.1
- Spring 4.1.4.RELEASE
- Spring WS 2.2.0.RELEASE
提前致谢