无法在 SOAP 请求上设置 Content-Type

Gre*_*g T 2 java soap kotlin

我正在向服务器发送 SOAP 调用,并且服务器坚持使用某个 Content-Type。我正在尝试设置内容类型,但似乎无法正确传输。

我从服务器收到响应:

415 无法处理消息,因为内容类型为 'text/xml; charset=utf-8' 不是预期的类型 'application/soap+xml; 字符集=utf-8'

我的粗略代码:

val soapConnectionFactory = SOAPConnectionFactory.newInstance()
val soapConnection = soapConnectionFactory.createConnection()
val url = "https://secure.com"

val messageFactory = MessageFactory.newInstance()
val soapMessage = messageFactory.createMessage()

// (create envelope)

val headers = soapMessage.mimeHeaders
headers.setHeader("Content-Type", "application/soap+xml; charset=utf-8")

soapMessage.saveChanges()

val soapResponse = soapConnection.call(soapMessage, url)
soapConnection.close()
Run Code Online (Sandbox Code Playgroud)

通过调试,内容类型似乎已正确设置为soapConnection.call()。有任何想法吗?

小智 5

您正在创建一个默认的 MessageFactory:

val messageFactory = MessageFactory.newInstance()
Run Code Online (Sandbox Code Playgroud)

正如文档所述

创建一个新的 MessageFactory 对象,该对象是默认实现 (SOAP 1.1) 的实例

SOAP 1.2 消息内容类型是“application/soap+xml”,而 SOAP 1.1 是“text/xml”(http://www.w3.org/TR/soap12-part0/#L4697)。

尝试创建一个提供 SOAP 1.2 作为协议的消息工厂实例

val messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL)
Run Code Online (Sandbox Code Playgroud)