Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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_Spring_Oxm - Fatal编程技术网

Java 我在注释模型类以支持所需的XML解组时遇到问题

Java 我在注释模型类以支持所需的XML解组时遇到问题,java,xml,spring,oxm,Java,Xml,Spring,Oxm,我感兴趣的是使用OXM框架来支持以下XML的解组,这些XML将作为请求的HTTP POST负载传递给RESTful API调用 这是我第一次尝试使用OXM框架,但在正确注释模型类时遇到了问题。我使用的是Spring3.0和JAXB2封送器,但我对特定的封送器实现漠不关心 问题: 1) 注释模型类以反映所需的XML结构的最佳策略是什么?下面我举了一个例子,说明了我是如何注释我的类的,当我尝试创建封送拆收器时,类有两个同名的属性“XXX” 2) 我可以采取什么策略来支持注释和类?我将SpatialX

我感兴趣的是使用OXM框架来支持以下XML的解组,这些XML将作为请求的HTTP POST负载传递给RESTful API调用

这是我第一次尝试使用OXM框架,但在正确注释模型类时遇到了问题。我使用的是Spring3.0和JAXB2封送器,但我对特定的封送器实现漠不关心

问题:

1) 注释模型类以反映所需的XML结构的最佳策略是什么?下面我举了一个例子,说明了我是如何注释我的类的,当我尝试创建封送拆收器时,
类有两个同名的属性“XXX”

2) 我可以采取什么策略来支持注释和类?我将SpatialXtent定义为一个接口,然后实现GeoBoundingBox XmlElement的类实现了这个接口。这适用于Java,但不适用于JAXB

3) 是否有任何地方可以改进所需的XML以简化编组/解编组

感谢您的帮助! --斯蒂芬

背景:

下面是我想使用的XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<AnalysisSettings>
    <service id="urn:nasa:giovanni:latlonplot"/>
    <spatialExtent>
        <GeoBoundingBox>
            <south>20.0</south>
            <north>90.0</north>
            <west>0.0</west>
            <east>180.0</east>
        </GeoBoundingBox>
    </spatialExtent>
    <temporalExtent>
        <TimePeriod>
            <startTime>2008-01-01T00:00:00Z</startTime>
            <endTime>2008-01-31T00:00:00Z</endTime>
        </TimePeriod>
    </temporalExtent>
    <variables>
        <Variable>
            <dataset id="urn:nasa:modis:MYD08_D3.005"/>
            <parameter id="urn:nasa:modis:Optical_Depth_Land_And_Ocean_Mean"/>
        </Variable>
        <Variable>
            <dataset id="urn:nasa:modis:M0D08_D3.005"/>
            <parameter id="urn:nasa:modis:Optical_Depth_Land_And_Ocean_Mean"/>
        </Variable>
    </variables>
</AnalysisSettings>
所有XmlElements注释都在引用模型对象的类方法上,所有XmlAttribute注释都在引用数据类型的类方法上(例如,
私有字符串id

我有一个早期的XSD:

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="AnalysisSettings" type="AnalysisSettingsType" />
  <xsd:complexType name="AnalysisSettingsType">
    <xsd:sequence>
      <xsd:element name="service" type="serviceType" />
      <xsd:element name="spatialExtent" type="spatialExtentType" />
      <xsd:element name="temporalExtent" type="temporalExtentType" />
      <xsd:element name="variables" type="variablesType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="variablesType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="Variable" type="variableType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="variableType">
    <xsd:sequence>
      <xsd:element name="dataset" type="datasetType" />
      <xsd:element name="parameter" type="parameterType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="parameterType">
    <xsd:attribute name="id" type="xsd:anyURI" />
  </xsd:complexType>
  <xsd:complexType name="datasetType">
    <xsd:attribute name="id" type="xsd:anyURI" />
  </xsd:complexType>
  <xsd:complexType name="temporalExtentType">
    <xsd:sequence>
      <xsd:element name="TimePeriod" type="TimePeriodType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="TimePeriodType">
    <xsd:sequence>
      <xsd:element name="startTime" type="xsd:dateTime" />
      <xsd:element name="endTime" type="xsd:dateTime" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="spatialExtentType">
    <xsd:sequence>
      <xsd:element name="GeoBoundingBox" type="GeoBoundingBoxType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="GeoBoundingBoxType">
    <xsd:sequence>
      <xsd:element name="south" type="xsd:decimal" />
      <xsd:element name="north" type="xsd:decimal" />
      <xsd:element name="west" type="xsd:decimal" />
      <xsd:element name="east" type="xsd:decimal" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="serviceType">
    <xsd:attribute name="id" type="xsd:anyURI" />
  </xsd:complexType>
</xsd:schema>


IIRC列表上的元素名称是针对每个列表项的;也许添加一个内部类来表示集合,并使用一个XmlRootElement来保存它们?好的,我添加了一个静态内部类变量,它有一个私有成员
Variables[/code>变量,用
@XmlElement(name=“Variable”)
注释。现在,我只需要弄清楚如何处理spatialExtent/temporalExtent,我关于
Classe的错误有两个同名的属性“XXX”
。静态内部类是否应该有
@XmlType
注释?
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="AnalysisSettings" type="AnalysisSettingsType" />
  <xsd:complexType name="AnalysisSettingsType">
    <xsd:sequence>
      <xsd:element name="service" type="serviceType" />
      <xsd:element name="spatialExtent" type="spatialExtentType" />
      <xsd:element name="temporalExtent" type="temporalExtentType" />
      <xsd:element name="variables" type="variablesType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="variablesType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="Variable" type="variableType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="variableType">
    <xsd:sequence>
      <xsd:element name="dataset" type="datasetType" />
      <xsd:element name="parameter" type="parameterType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="parameterType">
    <xsd:attribute name="id" type="xsd:anyURI" />
  </xsd:complexType>
  <xsd:complexType name="datasetType">
    <xsd:attribute name="id" type="xsd:anyURI" />
  </xsd:complexType>
  <xsd:complexType name="temporalExtentType">
    <xsd:sequence>
      <xsd:element name="TimePeriod" type="TimePeriodType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="TimePeriodType">
    <xsd:sequence>
      <xsd:element name="startTime" type="xsd:dateTime" />
      <xsd:element name="endTime" type="xsd:dateTime" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="spatialExtentType">
    <xsd:sequence>
      <xsd:element name="GeoBoundingBox" type="GeoBoundingBoxType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="GeoBoundingBoxType">
    <xsd:sequence>
      <xsd:element name="south" type="xsd:decimal" />
      <xsd:element name="north" type="xsd:decimal" />
      <xsd:element name="west" type="xsd:decimal" />
      <xsd:element name="east" type="xsd:decimal" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="serviceType">
    <xsd:attribute name="id" type="xsd:anyURI" />
  </xsd:complexType>
</xsd:schema>