在我的Scala/Play应用程序中,我有一个对SOAP API的简单调用:
import javax.xml.soap._
object API {
def call = {
val soapConnectionFactory = SOAPConnectionFactory.newInstance
val soapConnection = soapConnectionFactory.createConnection
val url = "http://123.123.123.123"
val soapResponse = soapConnection.call(createSOAPRequest, url)
soapConnection.close
}
def createSOAPRequest = {
val messageFactory = MessageFactory.newInstance
val soapMessage = messageFactory.createMessage
val soapPart = soapMessage.getSOAPPart
val serverURI = "http://some.thing.xsd/"
val envelope = soapPart.getEnvelope
envelope.addNamespaceDeclaration("ecl", serverURI)
val soapBody = envelope.getBody
val soapBodyElem = soapBody.addChildElement("TestRequest", "ecl")
soapBodyElem.addChildElement("MessageID", "ecl").addTextNode("Valid Pricing Test")
soapBodyElem.addChildElement("MessageDateTime", "ecl").addTextNode("2012-04-13T10:50:55")
soapBodyElem.addChildElement("BusinessUnit", "ecl").addTextNode("CP")
soapBodyElem.addChildElement("AccountNumber", "ecl").addTextNode("91327067")
val headers = soapMessage.getMimeHeaders
headers.setHeader("Content-Type", "application/json; charset=utf-8")
headers.addHeader("SOAPAction", serverURI + "TestRequest")
headers.addHeader("Authorization", "Basic wfewefwefwefrgergregerg")
println(headers.getHeader("Content-Type").toList)
soapMessage.saveChanges
soapMessage
}
println
输出我设置的右侧内容类型
标题:
List(application/soap+xml; charset=utf-8)
但是我调用的远程SOAP API以415
响应:
Bad Response; Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
我已经检查了用wireshark发送的请求,事实上,Content-Type
标头是错误的:
Content-Type: text/xml; charset=utf-8
在这种情况下,为什么我设置的内容类型被忽略?我该如何修复它?
更新:我想我已经了解了一些事情:
SOAPPart对象是MIME部件,具有MIME头内容Id、内容位置和内容类型。因为内容类型的值必须是“text/xml”,所以SOAPPart对象自动具有内容类型的MIME头,其值设置为“text/xml”。该值必须为“text/xml”,因为消息的SOAP部分中的内容必须为xml格式。非“text/xml”类型的内容必须在AttachmentPart对象中,而不是在SOAPPart对象中。
来源
只需要找出如何更改我的代码来匹配它。
UPDATE2:SOLVED只需要更改1行以指示这是SOAP 1.2:
val messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL)
只需更改1行,以指示这是SOAP 1.2,并自动设置右标题:
val messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL)
以下代码使用CORS协议完美地发送请求并接收响应。我想将内容类型标头更改为“应用程序/json”而不是“应用程序/x-www-form-urlencoded”。但是,当我将内容类型替换为“应用程序/json”时,请求失败。当我在浏览器中检查请求时,我可以看到内容类型标头已被删除而不是更改。 来自以上代码的请求 当“应用程序/x-web-form-urlencoded”被替换为“应用程序/json”
我设置header的方式如下: 它为一些服务工作,但我在添加自定义头的需求基础,我面临的问题。 我不能使用“.contenttype()”在请求中设置header,因为headersmap中动态设置的header的数量是可变的。
下面是我的Ajax请求: 如果我没有精确的内容类型,我就无法再看到Firebug的请求。相反,当我添加内容类型时,我可以看到POST请求(由于我的URL是false而出现错误),但在我的头中,内容类型默认是URL编码的表单。 我想要的是通过JSON数据发送表单的详细信息。谢谢你的帮助
我有一个支持json和XML的REST api。我想测试XML方面,但自从升级到2.4.0版本后,我得到了一个错误: 预期的内容类型“xml”与实际的内容类型“application/json”不匹配。
我试图使用服务/调度机制发布一个JAX-RS资源。问题是传出请求的内容类型被锁定为。我看不出有什么方法可以将其更改为其他类型,例如。 RESTful webservice只使用和。这是我使用的代码: 接受标头被修改为zoo标头,foo标头添加了值,但Content-Type保持不变。我想我可以使用一个过滤器,并根据一些条件修改,甚至基于foo头,但这似乎违反直觉。 以下是请求的所有标题: 感谢您的
本文向大家介绍docker容器内网络请求缓慢问题解决,包括了docker容器内网络请求缓慢问题解决的使用技巧和注意事项,需要的朋友参考一下 在使用docker的过程中发现了几个问题,在docker里进行的网络请求经常会失败,比如npm install以及bundle install等操作,或者是作为中间层在应用中去获取api数据的过程经常会出现timeout等情况,所以开始探究docker的网络机