Tag: xsd

如何使用MixedContent数据处理JAXB ComplexType?

我有这个XML结构: 0.00 17.5% Non-Recoverable vatspecial 请注意, Description节点具有MixedContent (由文本和XML组成) ,这是关于Description节点的XSD部分 : 此时一切正常, XJC输出生成的类,如下所示,关于TaxDescriptionType : package org.com.project; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * Java class for TaxDescriptionType complex type. * * The following schema fragment specifies the expected content contained within this class. * * […]

使用JAXB和Any进行序列化

我有一个定义以下类型的模式: 这会创建一个像这样的对象: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = “Payload”, propOrder = { “any” }) public class Payload { @XmlAnyElement(lax = true) protected List any; } 现在我尝试将另一个生成的JAXB对象添加到该Payload,执行以下操作: Class payloadClass = …; JAXBContext context = JAXBContext.newInstance( WrapperRequest.class, payloadClass); … marshaller.marshal( wrappedRequest ); 但是我得到一个可怕的exception看起来它永远不会工作所以我决定先将有效负载对象序列化为XML,然后将其作为字符串添加到有效负载中。 StringWriter writer = new StringWriter(); JAXBContext context = JAXBContext.newInstance( sdoRequest.getClass() ); Marshaller marshaller = context.createMarshaller(); marshaller.marshal(new JAXBElement(new […]

要针对多个xsd架构validation的XML

我正在编写xsd和validation代码,所以我在这里有很好的控制权。 我想有一个上传工具,可以根据xml文件向我的应用程序添加内容。 应根据其他部分中的一个值,针对不同的模式validationxml文件的一部分。 这是一个例子来说明: Harold Alpha Mercury 在这种情况下, 的内容有一些受控的词汇表,我可以很好地处理那部分。 然后,根据条形值,应使用适当的xml架构来validationbar-config的内容。 同样适用于baz和baz-config。 执行解析/validation的代码是用Java编写的。 不确定解决方案将依赖于语言。 理想情况下,该解决方案将允许xml作者声明适当的架构位置以及什么不是,以便他/她可以在足够智能的编辑器中动态validationxml。 此外, 和的可能值是正交的,因此我不希望通过扩展为每个可能的bar / baz组合执行此操作。 我的意思是,如果有24个可能的条形值/模式和8个可能的baz值/模式,我希望能够写出1 + 24 + 8 = 33个总模式,而不是1 * 24 * 8 = 192个模式。 此外,如果可能的话,我宁愿不将bar-config和baz-config分解为单独的xml文件。 我意识到可能会使所有问题变得更容易,因为每个xml文件都有一个模式,但我正在尝试查看是否有一个好的单xml文件解决方案。

如何在Java中针对XSD 1.1validationXML?

在Java中针对XML Schema 1.1validationXML文件的最佳方法是什么? 我从本教程中获取了代码并更改了工厂查找的行以使用XML Schema 1.1,正如我在Xerces FAQ中的代码示例中看到的那样。 这是我的代码: import java.io.File; import java.io.IOException; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.xml.sax.SAXException; public class XSDValidator { private static void validateFile(File xmlFile, File xsdFile) throws SAXException, IOException { // 1. Lookup a factory for the W3C XML Schema language SchemaFactory factory = SchemaFactory.newInstance(“http://www.w3.org/XML/XMLSchema/v1.1”); // […]

JAXB编译器将xs:boolean绑定到Java布尔包装类,而不是布尔基元类型

我正在将项目从JAXB 1.0迁移到JAXB 2.1,我遇到了数据类型映射问题。 我正在使用Ant xjc绑定编译器,并且我已经成功配置了全局绑定,例如xs:date映射到java.util.Calendar 。 但是我得到的生成方法返回Boolean ,而我想要boolean 。 这是复杂的类型: 生成的类看起来像这样: public class UsageAuthRateCharge { …….. public Boolean isPricepointCustomFieldsRequired() { return pricepointCustomFieldsRequired; } 问题是虽然装箱会起作用,但如果提供的XML不包含pricepoint_custom_fields_required的值,则类的布尔字段为空,而不是false。 这样做的时候我得到NullPointerExceptions : methodWhichTakesPrimitiveBooleanArg(myUsageAuthRateChargeInstance.isPricepointCustomFieldsRequired()); 因为它试图取消传入的布尔值 – 除了它为空。 我无法更改架构,我无法调整所有客户端代码来进行空检查。 我在binding.xml中设置了optionalProperty属性,如下所示: 在规范中,它说:“如果属性的值是”原始的“,它会像在JAXB 1.0中那样绑定” 然而,这显然没有发生。 我怎么解决这个问题? 更新: 这现在在jaxb 2.2.9中修复: https ://java.net/jira/browse/JAXB/fixforversion/16850

wsimport – 两个声明导致冲突,给出相同的行

尝试使用wsimport为SOAP端点生成客户端。 WSDL和使用的所有XSD文件都是本地副本。 这是正在执行的命令: wsimport ./bwWsdl.xml -p com.generated -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution 这给出了这个错误: [ERROR] Two declarations cause a collision in the ObjectFactory class. line 16 of file:/schemas/newSchema.xsd [ERROR] (Related to above error) This is the other declaration. line 16 of file:/schemas/newSchema.xsd 请注意,报告的碰撞的行号是相同的。 这是架构: Description here. More description here. 我已经尝试删除类型定义,但它在很多其他地方引用。 有谁可以提供任何有关如何使其工作的建议? 谢谢 编辑: 这是WSDL导入这些模式的行:

没有命名空间的xml的Java xsdvalidation

我想针对XSD架构validationXML文件。 XML文件根元素没有任何名称空间或xsi详细信息。 它没有属性,只有 。 我已经尝试了以下代码来自http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html而没有运气,因为我收到cvc-elt.1: Cannot find the declaration of element ‘root’ SchemaFactory factory = SchemaFactory.newInstance(“http://www.w3.org/2001/XMLSchema”); File schemaFile = new File(“schema.xsd”); Schema xsdScheme = factory.newSchema(schemaFile); Validator validator = xsdScheme.newValidator(); Source source = new StreamSource(xmlfile); validator.validate(source); xml使用包含的命名空间头文件(通过xmlspy添加)validation正常,但我认为可以声明xml命名空间而无需手动编辑源文件? 编辑和解决方案: public static void validateAgainstXSD(File file) { try { SchemaFactory factory = SchemaFactory.newInstance(“http://www.w3.org/2001/XMLSchema”); File schemaFile = new File(“path/to/xsd”); Schema […]

是否可以使用JAXB从模式映射到java.util.Map?

我有一个现有的XML模式,其中包含一个我希望使用JAXB映射到某种Java Map的类型。 我的构建过程采用模式并创建bean。 我想通过将我的架构映射中的一个complexTypes映射到java.util.Map来自定义此过程。 我读过JAXB“无法做接口”的地方。 我不确定这是否适用于这种情况,但如果是这样我可以将它映射到HashMap。 此外,它不一定必须是映射到Map的complexType,它可以是一个元素,如果这是所需的。 我使用.xjb文件控制我的JAXB生成,所以我正在寻找一些放在那里。 我尝试了以下,但它不起作用: 编辑:我已经添加了更多关于我已经尝试过的上述绑定的细节。 它在模式编译期间生成以下错误: [jaxb] [ERROR] compiler was unable to honor this javaType customization. It is attached to a wrong place, or its inconsistent with other bindings. 不起作用,因为它只能用于XML Schema原语和Java类型之间的映射 。 由于我想在复杂类型和Java类型之间进行映射,因此我无法使用它。

JAXB注释

我需要一些JAXB Annotations的帮助,我找不到好的doc帮助我解决这个问题。 我有一个我想编组成XML的类。 我的class级看起来像这样: @XmlRootElement(name=”car”) @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { “vid”, “make”, “model”, “recalls”, “engSpec” }) public class Car { @XmlElement(name=”vid”, required=true) private String vid; @XmlElement(name=”make”, required=true) private String make; @XmlElement(name=”model”, required=true) private String model; @XmlElement(name=”recalls”, required=true) private ArrayList recalls; @XmlElement(name=”engSpec”, required=true) private EngSpec engSpec; … 召回课看起来像这样: @XmlRootElement(name = “recall”) @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { “type”, “date” […]

如何在jaxb中解组并享受模式validation而不使用显式模式文件

我正在使用jaxb进行应用程序配置 我觉得我正在做一些非常歪曲的事情,我正在寻找一种不需要实际文件或此交易的方法。 正如您在代码I中看到的: 1.从我的JaxbContext(实际上来自我的类​​注释)创建一个模式到一个文件中.2。设置这个模式文件,以便在我解组时允许真正的validation JAXBContext context = JAXBContext.newInstance(clazz); Schema mySchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(schemaFile); jaxbContext.generateSchema(new MySchemaOutputResolver()); // ultimately creates schemaFile Unmarshaller u = m_context.createUnmarshaller(); u.setSchema(mySchema); u.unmarshal(…); 你们中的任何人都知道如何validationjaxb而不需要创建一个位于我的计算机中的模式文件吗? 我是否需要创建用于validation的模式,当我通过JaxbContect.generateSchema获取它时,它看起来是多余的? 你怎么做到这一点?