我需要创建一个描述 Java 对象的 XML 模式定义 (XSD)。
我想知道当有问题的对象从具有类型参数的公共基类继承时如何执行此操作。
public abstract class Rule<T> { ... }
public abstract class TimeRule extends Rule<XTime> { ... }
public abstract class LocationRule extends Rule<Location> { ... }
public abstract class IntRule extends Rule<Integer> { ... }
....
Run Code Online (Sandbox Code Playgroud)
(其中XTime和Location是在别处定义的自定义类)
我将如何构建一个 XSD,以便我可以拥有代表每个子类的 XML 节点Rule<T>- 没有每个子类的 XSD 重复它们的公共内容?
谢谢!
我在 VB.NET 中工作 - C# 答案很好。
我正在构建一个系统来处理针对特定 XmlSchema 的 XML 验证。我的 XML 文档中的每个错误都有一个 SchemaException 实例,我可以从中获取错误的行号和位置以及消息。据我所知,确定特定错误(无效属性、缺少元素等)的唯一方法是读取不可靠的消息字符串,因为 MS 将来可能更改它并且消息被本地化。
我需要能够在不依赖 .Message 属性的情况下区分这些错误,以便显示我自己的自定义错误并在我的文本编辑器中突出显示错误。
区分这些的正确方法是什么?这一定是可能的,对吧?
更多信息:
异常的 LinePosition 属性并不总是报告我想要开始突出显示的位置 - 例如,所有与属性相关的异常都会报告属性的开始,如果这是问题。
SchemaException 提供了一个 SourceSchemaObject 属性,我可能可以用它来确定问题是来自元素还是属性,如果幸运的话,我可能会通过提取导致错误并以某种方式将它与 SourceSchemaObject 进行比较,但这感觉像是一个非常复杂和笨拙的解决方案 - 如果我能解决特定的错误,我可以通过一些正则表达式工作来解决它。
如何<table>用XSD实现简单的标签匹配?
以下不起作用:
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element name="tr" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="td"
minOccurs="0"
maxOccurs="unbounded"
type="MixedTemplateContentContainer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
如果我在 table 标签中使用任何属性,它会失败:
<table ccc="table" bgcolor="#ffffff">
<tr align="center"><td>
Run Code Online (Sandbox Code Playgroud)
说
属性 'ccc' 不允许出现在元素 'table' 中。
使用方案验证XML DOMDocument时:
$ result = $ Document - > schemaValidate('../../ DTE/document/scheme.xsd');
我收到一条警告信息:
警告:DOMDocument :: schemaValidate():元素'foo':不期望此元素.预期是({url} foo,{url} bar)之一.
'foo'和'{url} foo'有什么区别以及如何修复此警告?
我正在尝试使用Axis2 wsdl2java从一大套模式(总共15k行)生成Java存根,并且遇到以下复杂类型的问题。最初在架构文件上运行该工具时,我收到了一条非描述性的错误消息,“不支持的内容简单内容!”。为了找到此错误的原因,我从源代码下载并部署了Axis2项目,找到了错误字符串并检查了引起问题的元素。我相信问题的根源与在简单内容内嵌套具有简单内容的复杂类型有关。
我有两个示例,分别是SequencedTextType(失败)和OpenTextType(成功)。两种类型都具有作为TextType扩展名的内容。这样应该可以更容易地发现问题并提供解释。
该故障 SequencedTextType:
<xs:element name="Reason" type="SequencedTextType" id="oagis-id-fa892eb1e28c46088bc50394c62a8655"/>
<xs:complexType name="SequencedTextType" id="oagis-id-51e010d7a1e24ebe89fcf58989fefd1b">
<xs:complexContent>
<xs:extension base="TextType">
<xs:attribute name="sequenceNumber" type="NumberType_B98233" id="oagis-id-39a5a53826024a65a2291f50d9feecd3"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="NumberType_B98233" id="oagis-id-d614ed8726ff482c9c5a8183d735d9ed">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
在路过 OpenTextType:
<xs:complexType name="OpenTextType" id="oagis-id-5840f7a57dd949ababcd1eb394b2840c">
<xs:simpleContent>
<xs:extension base="TextType">
<xs:attribute name="typeCode" type="CodeType_1E7368" id="oagis-id-2780e69800934662a4782be31c2bacf6"
use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="CodeType_1E7368" id="oagis-id-d2f721a297684b538e7dbb88cf5526bc">
<xs:restriction base="xs:token"/>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
该共享 TextType:
<xs:complexType name="TextType" id="oagis-id-d97b8cf6a26f408db148163485796d15">
<xs:simpleContent>
<xs:extension base="TextType_62S0B4"/>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="TextType_62S0B4" id="oagis-id-89be97039be04d6f9cfda107d75926b4">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="languageCode" type="clm56392A20081107_LanguageCodeContentType" id="oagis-id-c8d0c7094d7d4fbeb7e50fd20a17c1b3" use="optional"/>
</xs:extension>
</xs:simpleContent> …Run Code Online (Sandbox Code Playgroud) 我花了很长时间试图弄清楚如何验证XML文件,并且我已经使用预先生成的XSD架构.但是,我希望在没有创建文件的情况下动态生成模式,基于我指定的注释类,我试图不向SchemaFactory指定任何参数,但是它似乎只是创建一个空模式(请参阅下面的注释) .
以下是我用于JAXB读取和写入XML文件的两个类.
这是XMLTranslationWrapper类的代码:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(namespace = "my.package.namespace")
public class XMLTranslationWrapper {
@XmlElementWrapper(name = "TRANSLATIONS")
@XmlElement(name = "TRANSL")
public ArrayList<XMLTranslationNode> translations;
public XMLTranslationWrapper(){
translations = new ArrayList<XMLTranslationNode>();
}
public void setTranslations(ArrayList<XMLTranslationNode> translations){
this.translations = translations;
}
public XMLTranslationNode getTranslation(String code){
for(XMLTranslationNode transl : translations){
if(transl.getCode().equals(code))
return transl;
}
return null;
}
public void addTranslation(XMLTranslationNode translation){
this.translations.add(translation);
}
}
Run Code Online (Sandbox Code Playgroud)
这是XMLTranslationNode类的代码:
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlRootElement(name = "TRANSL")
@XmlType(propOrder = { "severity", "translation" })
public class XMLTranslationNode {
private String severity;
private String code;
private …Run Code Online (Sandbox Code Playgroud) 我需要在Java中生成基于XSD模板的XML文件,我可以解析XSD文件,但解析后不知道,热生成XML文件.你知道怎么做的例子或建议吗?我对此并不是很专家,所以我感谢任何帮助.
提前谢谢了.
我有一个如下所示的架构,我有一些关于架构的问题
1.如何制作CourierNumber或WorkLocationCoordinate强制。我使用了如下所示的一种全局类型
编辑 仍然没有运气,因为 Abel 提到我修改了架构,但它失败了。输入 xml 是
<?xml version="1.0" encoding="utf-8"?>
<NOCPlantMapRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<NOCTypeID>0</NOCTypeID>
<WorkLocation>
<ParcelNumber>4545</ParcelNumber>
<Roads>
<WorkLocationRoad>
<RoadName>dubai road</RoadName>
</WorkLocationRoad>
</Roads>
<WorkArea>
<WorkArea>
<Coordinates>
<WorkLocationCoordinate>
<CoordinateX>56</CoordinateX>
<CoordinateY>23</CoordinateY>
</WorkLocationCoordinate>
</Coordinates>
<Communities />
</WorkArea>
</WorkArea>
</WorkLocation>
</NOCPlantMapRequest>
Run Code Online (Sandbox Code Playgroud)
模式是
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified"
elementFormDefault="qualified">
<xsd:element name="NOCPlantMapRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="NOCReference" minOccurs="0" type="xsd:string" />
<xsd:element name="NOCTypeID" minOccurs="0" type="xsd:unsignedByte" />
<xsd:element name="NOCTypeName" minOccurs="0" type="xsd:string" />
<xsd:element name="ApplicationName" minOccurs="0" type="xsd:string" />
<xsd:element name="Applicationtype" minOccurs="0" type="xsd:string" />
<xsd:element …Run Code Online (Sandbox Code Playgroud) 我有一个带有多个 XSD 模式的 Spring Boot 项目(我使用的是 Spring-WS)。
如果我使用 Spring 的 PayloadValidatingInterceptor 来验证请求和响应,它只适用于最新的设置模式。
例如:
public void addInterceptors(List<EndpointInterceptor> interceptors) {
PayloadValidatingInterceptor validatingInterceptor = new PayloadValidatingInterceptor();
validatingInterceptor.setValidateRequest(true);
validatingInterceptor.setValidateResponse(true);
validatingInterceptor.setXsdSchema(getFirstSchema());
validatingInterceptor.setXsdSchema(getSecondSchema());
interceptors.add(validatingInterceptor);
super.addInterceptors(interceptors);
}
Run Code Online (Sandbox Code Playgroud)
此代码段将使 Spring 仅验证第二个模式,而不是第一个。我尝试创建多个 PayloadValidatingInterceptors 以使用 super.addInterceptors(interceptors); 添加它们,但它也不起作用。我能找到的唯一响应(使用 Java 而不是 XML)来自 2009 年:
https://jira.spring.io/browse/SWS-481
有谁知道基于 Java 的解决方案来验证来自同一项目中多个 XSD 的请求和响应?
我正在尝试SchemaCollection在我的 Web 服务配置中使用 。但是当我为此添加代码时,我收到此错误:
引起:java.lang.IllegalArgumentException:schemaElement 不能为空!您是否运行 afterPropertiesSet() 或将其注册为 Spring bean?
这个错误是什么意思?查看Spring 代码,与schemaElementXSD 上的有关,但我无法说出什么。
没有 schemaCollection,一切正常。
完整错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pedidos' defined in class path resource [br/com/company/rdt/config/WebServiceConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: schemaElement must not be null! Did you run afterPropertiesSet() or register this as a Spring bean?
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1631) ~[spring-beans-4.3.20.RELEASE.jar:4.3.20.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.20.RELEASE.jar:4.3.20.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) ~[spring-beans-4.3.20.RELEASE.jar:4.3.20.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) ~[spring-beans-4.3.20.RELEASE.jar:4.3.20.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.20.RELEASE.jar:4.3.20.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) ~[spring-beans-4.3.20.RELEASE.jar:4.3.20.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) …Run Code Online (Sandbox Code Playgroud)