Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的XML模式没有验证?_Java_Xml_Soap_Polymorphism - Fatal编程技术网

Java 为什么我的XML模式没有验证?

Java 为什么我的XML模式没有验证?,java,xml,soap,polymorphism,Java,Xml,Soap,Polymorphism,我有以下Java类: public class input{ @XmlElement(namespace="http://www.example.com/TopLevel") public TopLevel TopLevel; } 及 及 在部署这些类之后,我希望发出一个SOAP请求,并能够在XML中将TopLevel变形为子类。我的要求如下: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelo

我有以下Java类:

public class input{

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

在部署这些类之后,我希望发出一个SOAP请求,并能够在XML中将TopLevel变形为子类。我的要求如下:

<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>

测试
我所期望的是,子类将映射到顶级,我将能够使用
attribute2
,但由于某些原因,这将无法验证。不要在请求中定义似乎未定义的名称空间。我跳过了它们以使请求更容易阅读。验证故障发生在线路上:

说:

元素输入中的xsi:type qname:'subclass'无效


有人能指出我做错了什么吗?根据所有的例子,我发现这应该是解决问题的方法。

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

因此,我需要补充:

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

并用
@XmlType
注释顶层和子类。

我找到了解决问题的方法。 我正在使用IBMODM,即使我的所有类都定义了名称空间,ODM也不会将名称空间导入WSDL,除非在输入对象中定义了对象

因此,我需要补充:

@XmlType(namespace = "Some namespace")
public class Input() {
    public TopLevel topLevel;
    public SubClass subClass;
}
并使用
@XmlType
注释注释顶级和子类

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