gpt4 book ai didi

java - MTOM - 根内容类型始终为文本/xml

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:11 24 4
gpt4 key购买 nike

我正在使用 MTOM 将附件从客户端流式传输到服务器。

MTOM 得到应用,文件以二进制形式流式传输。但是根 Content-Type 始终是 "text/xml",应该是 "application/xml+xop"。

问题只出现在 websphere 中。内容类型在 websphere 中设置为 "text/xml"

websphere liberity profile中,内容类型设置为"application/xml+xop"

------=_Part_7283_-2062365125.1458743649653
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <511212039242.1458743649653.IBM.WEBSERVICES@lsrv4665.linux.rabobank.nl>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
</soapenv:Header>
<soapenv:Body>
<Content><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:58cf03d2-322f-4819-80fb-3b001f497d12%40www.test.com"/>
</Content>
</soapenv:Body>
</soapenv:Envelope>

Content-Type: application/pdf; name=attachment.pdf

Content-Transfer-Encoding: binary

最佳答案

我收集了几个答案。希望第一个答案适合你。为了预防起见,我还添加了一些其他带有链接的答案。希望它能拯救你。

回答 1:

服务器端(Weblogic 中的 JAX-WS)

使用@MTOM注释或 mtom.xml政策

客户端(Weblogic 中的 JAX-WS)

Pass MTOMFeature() as argument:
MtomService port = service.getMailServicePort(new MTOMFeature());

通过 SOAPUI 连接 MTOM,3 个步骤:

  1. Set Enable MTOM = true在请求属性中
  2. 上传附件(如A3.pdf),注意contentID
  3. 在xml请求中设置MTOM contentID

这是一个带有 weblogic 图像的完整示例。希望它能解决您的问题。(Sending attachment: MTOM / XOP vs SWA and inline attachment 的链接)

另一个资源链接:

  1. Steps to Use MTOM/XOP to Send Binary Data
  2. Error consuming webservice, content type “application/xop+xml” doesnot match expected type “text/xml”

答案 2:

拉入 saaj-impl 1.3.23并更喜欢 javax.xml.soap.* 的应用程序类解决了这个问题。

资源链接:https://jira.spring.io/browse/SWS-855


答案 3:

来自 mkyong 的 tutorial ,在客户端和服务端启用mtom即可解决。

在服务器上启用 MTOM:

让服务器通过MTOM发送附件非常简单,只需要在web服务实现类上注解javax.xml.ws.soap.MTOM即可。 .

在客户端启用 MTOM:

启用客户端通过 MTOM 将附件发送到服务器需要一些额外的努力,请参见以下示例:

//codes enable MTOM in client
BindingProvider bp = (BindingProvider) imageServer;
SOAPBinding binding = (SOAPBinding) bp.getBinding();
binding.setMTOMEnabled(true);

答案-4

归功于@ BalusC .他通过出色的教程给出了很棒的答案。

当通过 HTTP 提供页面时,元标记将被忽略。

使用JSP时,

你应该输入<%@ page pageEncoding="UTF-8" %>在顶部。

使用Servlet时,

你应该做 response.setCharacterEncoding("UTF-8"); .

两者都会在内容类型 header 中隐式设置正确的字符集。您可能会发现这篇文章很有用:Unicode - How to get characters right? .对于 JSP/Servlet 解决方案,从 this chapter 开始.

资源链接:

  1. How to set the "Content-Type ... charset" in the request header using a HTML link

对于研究,您可以通过以下内容

对于 Java servlet,你应该有一行

response.setContentType("text/html");

在你的 doGet 的顶部或 doPost方法,其中 response 是对 HttpServletResponse 的引用.

相关链接:

  1. How to set up your server to send the correct MIME types
  2. Character Encoding problem with IBM's JSF and Ajax

另一个答案

我已经弄清楚是什么导致了这个问题,但我不明白为什么。当对请求执行错误操作时,该行为就会自行显现。附件是一个简单 MPG 的 zip,其中包含演示此操作的请求、响应和错误规则。该请求有一个错误操作、一个执行 dp:reject(强制错误)的简单 xform 和一个结果操作。错误规则有一个 results 操作和一个 set var 操作。如果您保留 on-error,则响应内容类型将返回为“text/xml”。如果删除 on-error,内容类型将正确返回“application/json”。 (从以下资源链接复制)

资源链接:

  1. How to set header Content-Type in error rule

关于java - MTOM - 根内容类型始终为文本/xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36283680/

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