2010-08-06 70 views
3

我正在使用com.ctc.wstx.stax.WstxOutputFactory來生成XML。 我正在運行wstx-asl-3.2.4我應該如何針對W3架構使用Stax2驗證API

我需要開始根據W3模式驗證生成的XML。

當我創建的org.codehaus.stax2.validation.XMLValidationSchemaFactory一個實例這樣

private final static XMLValidationSchemaFactory xsdFact= XMLValidationSchemaFactory.newInstance(XMLValidationSchema.SCHEMA_ID_W3C_SCHEMA);

我得到的錯誤

javax.xml.stream.FactoryConfigurationError: No XMLValidationSchemaFactory implementation class specified or accessible (via system property 'org.codehaus.stax2.validation.XMLValidationSchemaFactory.w3c', or service definition under 'META-INF/services/org.codehaus.stax2.validation.XMLValidationSchemaFactory.w3c') at org.codehaus.stax2.validation.XMLValidationSchemaFactory.newInstance(XMLValidationSchemaFactory.java:208) at org.codehaus.stax2.validation.XMLValidationSchemaFactory.newInstance(XMLValidationSchemaFactory.java:98)

我可以看到woodstox捆綁只有DTD解析器。 我發現this article 其中包含無益的指令

  1. Get an instance of XMLValidationSchemaFactory that knows how to parse schemas of the type you need (RelaxNG == rng for this example).

我一直在尋找的Sun Multi-Schema XML Validator它應該包含必要的位狼吞虎嚥到XMLSchemaValidation工廠。

它看起來像我可能能夠使用com.sun.msv.reader.xmlschema.XMLSchemaReader 寫我自己的XMLValidationSchemaFactory的實例,並讓它以這種方式工作。

我的問題是;我真的必須這樣做,還是有一個我沒有找到的預先存在的w3c模式工廠?

也許只是在之後驗證XML 可能會更簡單一些。

對此有何看法?

+0

其實我剛剛搜索了com.ctc.wstx.msv.W3CSchemaFactory。我可能只需要升級我的woodstox版本 – 2010-08-06 10:57:24

回答

3

我已經升級到Woodstox 4.0.8,W3CSchemaFactory捆綁出來,它的一切都很好。

+0

是的;很抱歉,遲到的迴應XML Schema支持剛剛添加到4.0中。 3.2確實使用MSV支​​持RelaxNG,以及本地DTD驗證,但尚未支持XML Schema。 – StaxMan 2010-08-10 19:46:57