Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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 生成的XSD不会解组XML_Java_Xml_Jaxb_Xsd_Generated - Fatal编程技术网

Java 生成的XSD不会解组XML

Java 生成的XSD不会解组XML,java,xml,jaxb,xsd,generated,Java,Xml,Jaxb,Xsd,Generated,我有一个XML字符串,无法使用提供的XSD在java中解组对象。因此,我尝试使用一个在线工具(www.freeformatter.com/xsd generator.html)生成一个有效的xsd,但得到了相同的错误。我不明白我看到了什么 以下是XML: 回复 XXXX XXXX 2013-12-12 17:48:09.649 2013-12-12 17:48:09.649 AN-138686889649 AN-138686889649 结果 好啊 300 成功 这是我从工具中得到的XSD

我有一个XML字符串,无法使用提供的XSD在java中解组对象。因此,我尝试使用一个在线工具(www.freeformatter.com/xsd generator.html)生成一个有效的xsd,但得到了相同的错误。我不明白我看到了什么

以下是XML:


回复
XXXX
XXXX
2013-12-12 17:48:09.649
2013-12-12 17:48:09.649
AN-138686889649
AN-138686889649
结果
好啊
300
成功
这是我从工具中得到的XSD:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.domain.com/ws" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="ServiceResultObject">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ResultObject">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute type="xs:string" name="value"/>
                <xs:attribute type="xs:string" name="codIsin"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute type="xs:string" name="isin"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

生成类之后,我得到了错误

javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“Message”)。预期的要素是


为什么我会丢失所有标题信息?为什么XSD不会产生一个实际解组对象的模式?这里的服务人员提供的XSD也只定义了内部对象。

因为您的XML文档有两个名称空间(
http://www.domain.com/ws/protocol
&
http://www.domain.com/ws
)您需要两个XML模式来表示它。一个模式可以使用
import
元素引用另一个模式

XML纲要 下面我开始介绍XML所需的XML模式

ws.xsd(用于
http://www.domain.com/ws
namespace)

这是
XML模式的一部分http://www.domain.com/ws
。整个过程是您已经生成的

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.domain.com/ws" 
    xmlns:tns="http://www.domain.com/ws" 
    elementFormDefault="qualified">

    <element name="ServiceResultObject">
        <complexType>
            <sequence/>
            <attribute name="isin" type="string"/>
        </complexType>
    </element>

</schema>
创建JAXBContext 一旦有了这两个XML模式,这些类将生成两个不同的包。下面是如何引导
JAXBContext
的示例。请注意,包名称由
字符分隔

JAXBContext jc = JAXBContext.newInstance("com.domain.ws:com.domain.ws.protocol");

因为您的XML文档有两个名称空间(
http://www.domain.com/ws/protocol
&
http://www.domain.com/ws
)您需要两个XML模式来表示它。一个模式可以使用
import
元素引用另一个模式

XML纲要 下面我开始介绍XML所需的XML模式

ws.xsd(用于
http://www.domain.com/ws
namespace)

这是
XML模式的一部分http://www.domain.com/ws
。整个过程是您已经生成的

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.domain.com/ws" 
    xmlns:tns="http://www.domain.com/ws" 
    elementFormDefault="qualified">

    <element name="ServiceResultObject">
        <complexType>
            <sequence/>
            <attribute name="isin" type="string"/>
        </complexType>
    </element>

</schema>
创建JAXBContext 一旦有了这两个XML模式,这些类将生成两个不同的包。下面是如何引导
JAXBContext
的示例。请注意,包名称由
字符分隔

JAXBContext jc = JAXBContext.newInstance("com.domain.ws:com.domain.ws.protocol");