Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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 jaxb可以生成这样的xml模式吗?_Java_Xml_Jaxb_Xsd - Fatal编程技术网

Java jaxb可以生成这样的xml模式吗?

Java jaxb可以生成这样的xml模式吗?,java,xml,jaxb,xsd,Java,Xml,Jaxb,Xsd,我希望JAXB生成的XML具有以下模式: <payload> <parameters> <paramName>clientAssocIds</paramName> <paramVal>0207</paramVal> <paramName>quoteType</paramName> <paramVal>NTB</paramVal&g

我希望JAXB生成的XML具有以下模式:

<payload>
   <parameters>
      <paramName>clientAssocIds</paramName>
      <paramVal>0207</paramVal>
      <paramName>quoteType</paramName>
      <paramVal>NTB</paramVal>
      <paramName>quoteDateLimitDays</paramName>
      <paramVal>365</paramVal>
      <paramName>externalIndicator</paramName> 
      <paramVal>1</paramVal>
   </parameters>
</payload>

clientAssocIds
0207
引用类型
NTB
报价截止日期
365
外部指示器
1.
是名称和值对,这意味着
必须遵循

我编写了一个XML模式,并使用JAXB根据该模式生成java类,然后我设置了所有值并编组了该类,但它没有生成我上面期望的XML模式

这是我的模式:

<xsd:complexType name="sgrpCommonMessage">
  <xsd:sequence>
    <xsd:element name="payload" type="payload" />
  </xsd:sequence>
</xsd:complexType>



<xsd:complexType name="payload">
  <xsd:sequence>
    <xsd:choice minOccurs="0" maxOccurs="1">
        <xsd:element name="parameters" type="parameter" />
    </xsd:choice>
  </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="parameter">
  <xsd:sequence>
    <xsd:element minOccurs="0" name="paramName" type="xsd:string" />
    <xsd:element minOccurs="0" name="paramVal" type="xsd:string" />
  </xsd:sequence>
</xsd:complexType>

生成的xml有一些
,这不是我所期望的。我想将所有
对包装在一个
中:


报价截止日期
NTB
clientAssocIds
0207
引用类型
NTB
外部指示器
NTB

我想知道JAXB是否能够实现这种XML结构,如果不能,我应该使用什么API,如果可以,如何使用?

您可以有如下XML模式:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:element name="parameters" type="parameters" />

    <xsd:complexType name="parameters">
        <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="paramName" type="xsd:string" />
            <xsd:element name="paramValue" type="xsd:string" />
        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>

然后,使用生成的模型,您可以执行以下操作:

import javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(“forum14571803”);
ObjectFactory ObjectFactory=新的ObjectFactory();
Parameters=objectFactory.createParameters();
parameters.getParamNameAndParamValue().add(objectFactory.createParametersParamName(“A”));
parameters.getParamNameAndParamValue().add(objectFactory.createParametersParamValue(“a”));
parameters.getParamNameAndParamValue().add(objectFactory.createParametersParamName(“B”));
parameters.getParamNameAndParamValue().add(objectFactory.createParametersParamValue(“b”));
JAXBElement root=objectFactory.createParameters(参数);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
marshaller.marshall(root,System.out);
}
}
这将为您提供以下输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parameters>
    <paramName>A</paramName>
    <paramValue>a</paramValue>
    <paramName>B</paramName>
    <paramValue>b</paramValue>
</parameters>

A.
A.
B
B

感谢您的回复,我知道模式不好,但是如果我想调用此web服务,我需要匹配他们的xml模式。您发布的架构缺少了
标记。谢谢Blaise,它真的很有帮助,诀窍是在
标记中添加maxOccurs属性,我非常感谢您的帮助
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parameters>
    <paramName>A</paramName>
    <paramValue>a</paramValue>
    <paramName>B</paramName>
    <paramValue>b</paramValue>
</parameters>