Java jaxb可以生成这样的xml模式吗?
我希望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
<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>