Java 服务 - SOAP 响应始终向 .NET 返回 NULL

标签 java .net xml soap xsd

我有一个使用 Java 中的 Spring Boot 开发的 SOAP 1.1 服务,它可以毫无问题地响应我的任何请求并提供有效的 SOAP 响应。

现在的问题是,一旦我将此服务作为服务引用添加到任何 .NET/C# 项目中,就会创建引用,并且我可以发送请求,但响应(肯定是从我的 SOAP 服务发送的)无法映射回,并且我的 .NET 应用程序中的对象始终为 null。

我已经发现问题可能是什么,但我不知道如何(如果可能的话)更改我的 xsd/wsdl 以正确生成所有源。

首先,这是我的 Java Spring Boot 项目中的 .xsd,用于生成 WSDL 和服务引用:

以下是在 C# 项目中从 Visual Studio 生成的服务引用中的代码:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute([NAMESPACE]/processing", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("processingResponse", Namespace="http://[NAMESPACE]/base", IsNullable=true)]
public processingResponse processing([System.Xml.Serialization.XmlElementAttribute(Namespace="http://[NAMESPACE]/base", IsNullable=true)] processingRequest processingRequest) {
    object[] results = this.Invoke("processing", new object[] {
        processingRequest});
    return ((processingResponse)(results[0]));
}

我发现是否更改了以下行

[return: System.Xml.Serialization.XmlElementAttribute("processingResponse", Namespace="http://[NAMESPACE]", IsNullable=true)]

并添加“Form=System.Xml.Schema.XmlSchemaForm.Unqualified”:

[return: System.Xml.Serialization.XmlElementAttribute("processingResponse", Namespace="http://[NAMESPACE]", IsNullable=true, Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]

响应已正确映射到我的对象,目前似乎没有任何问题。

问题是我想更改我的 .xsd 以从一开始就正确生成这些源 - 我已经尝试将 Form=Unqualified 添加到“processingResponse”complexType 内的“AppDataDataResult”元素,但它不起作用。

将此属性直接添加到processingResponse 元素不起作用,因为这是不可能的,因为 位于架构定义/标记下一级。

我还没有找到这个问题的任何具体解决方案,因为它似乎与 Spring Boot Framework Java 以及 wsdl 的生成非常具体。

我希望有人可以帮助我解决这个问题,因为它似乎不是一个大问题(它“唯一”需要在源生成过程中添加的属性),但我似乎无法找到解决方案。预先感谢您的帮助!

最佳答案

我发现了问题,并且对此问题进行了非常简单的修复 - 在我的 Spring Boot 项目中,我返回 JAXBElements,响应的参数是“QName”,它指示响应的对象。这里的问题是 SOAP-Response 在 .NET 中生成源期间没有相关的命名空间来识别对象。因此,我将正确的命名空间 URI 添加到 QName 对象,现在对象得到解析并返回正确的响应:

final QName qname = new QName(NAMESPACE_URI, "processingResponse");
return new JAXBElement<>(qname, ProcessingResponse.class, processingResponse);

最后,这是一个非常愚蠢/简单的问题,但我尝试了其他所有方法,但没有尝试最明显/最简单的问题。

关于Java 服务 - SOAP 响应始终向 .NET 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55843429/

相关文章:

Java 4 : Sorting an array by 2 values

java - Android 文本字段和 TextView 从一个布局到另一个布局

.net - 具有继承性的企业库验证应用程序 block

java - 使用 java jxl 在 excel 中创建和访问工作表

c# - 从循环外跳入循环内的标签不是非法的C#代码吗?

.net - 从服务器端应用程序向客户端推送消息?

Java - 保存 XML 后保留空格

java - 如何在Spring MVC中没有XML的情况下将defaultHtmlEscape设置为true?

java - 前置摄像头连接摄像头服务失败?

java - log4j xml配置问题