java - 为什么我的 XML 架构无法验证?

标签 java xml soap polymorphism

我有以下 Java 类:

public class input{

@XmlElement(namespace="http://www.example.com/TopLevel")
public TopLevel TopLevel;
}

public class TopLevel{
    private String attribute;

    public void setAttribute(String attribute) {
        this.attribute = attribute;
    }

    public String getAttribute() {
        return attribute;
    }
}

import javax.xml.bind.annotation.XmlType;

@XmlType(namespace="http://org.classes.SubClass", name="SubClass")
public class SubClass extends TopLevel {
    private String attribute2;

    public String getAttribute2() {
        return attribute2;
    }

    public void setAttribute2(String attribute2) {
        this.attribute2 = attribute2;
    }
}

部署类后,我想要发出 SOAP 请求并能够将 XML 中的 TopLevel 转换为 SubClass。我的请求如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
... xmlns:top1="http://www.example.com/TopLevel" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <top:TopSubClass_TestRequest>
         <par:input>
            <input>
               <top1:toplevel xsi:type="ns5:subclass" xmlns:ns5="http://org.classes.SubClass">
                  <attribute2>test</attribute2>
               </top1:toplevel>
            </input>
         </par:input>
      </top:TopSubClass_TestRequest>
   </soapenv:Body>
</soapenv:Envelope>

我期望的是 SubClass 将映射到 TopLevel,我将能够使用 attribute2但由于某种原因,这不会被验证。不要介意请求中似乎没有定义的 namespace 。我跳过了它们以使请求更容易阅读。验证问题发生在以下行:

<top1:toplevel xsi:type="ns5:subclass" xmlns:ns5="http://org.classes.SubClass">

说:

Invalid xsi:type qname: 'subclass' in element Input

谁能指出我做错了什么?根据所有示例,我发现这应该是处理它的方法。

最佳答案

我已经找到了解决问题的方法。 我正在使用 IBM ODM,尽管我的所有类都定义了命名空间,但 ODM 不会将命名空间导入到 WSDL 中,除非在输入对象中定义了对象。

因此我需要添加:

@XmlType(namespace = "Some namespace")
public class Input() {
    public TopLevel topLevel;
    public SubClass subClass;
}

并使用@XmlType注释来注释TopLevel和SubClass。

关于java - 为什么我的 XML 架构无法验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47508890/

相关文章:

java - 在网络服务中使用 gson

java - 我应该为以下功能编写哪些单元测试用例?另外,如何提供示例 JSONobject 作为函数中的参数?

c# - WCF 返回流还是字符串?

java - 使用 Spring Boot 和 Spring Data JPA 的 CriteriaQuery 中出现空指针异常

xml - 在一个 xml 中使用两个架构

xml - 使用 XPath 从 WSDL 文件中导入的 ("xsd:import") 架构获取 XML 元素声明

python - XML SOAP POST 错误,我做错了什么?

java - 从 java 字符串生成 SOAP 消息

Java mks api 崩溃

java - 本地时区存储在 MySQL 中的 Spring Boot JPA 时间