CXF java2ws:如何包含外部xsd文件?

时间:2011-07-14 17:21:59

标签: java jaxb cxf jaxb2

我为几个Web服务(来自服务器服务定义)生成WSDL文件,其中我已经为用作参数的bean创建了XML模式(* .XSD)。我如何告诉java2ws引用这些(包括外部XSD)而不是在WSDL中生成它自己的?

我已经尝试过-createxsdimports,但它会生成自己的XSD文件。

我是否可以使用Java Annotation让CXF知道每个文件/包的XSD在哪里?

2 个答案:

答案 0 :(得分:4)

尝试@XmlSchema注释。它包含一个location参数,用于告诉JAXB存在真实模式:

@XmlSchema(location="http://www.example.com/xsds/foo.xsd")
package com.example.foo;

答案 1 :(得分:2)

我有一个导入外部模式文件的CXF Web服务。当我建造它;我花了很多时间试图找出你想要实现的确切场景。不幸的是,从java生成WSDL时,似乎CXF不尊重@XmlSchema(location =“”)注释。主要的CXF开发人员Daniel Kulp当时告诉我这是一个已知的问题,但没有足够的人抱怨它,所以它的优先级列表并不高。

所以我最终手工编写了WSDL,然后从WSDL文件生成SEI。当然,如果你手写WSDL,你可以做任何你想做的事。

请记住,这样做的一个副作用是外部模式文件需要HTTP GET访问 - 在生成SEI时和Web服务应用程序启动时 - CXF将在启动时检索模式文件。当然,当您生成客户端时也是如此。这确实会造成一些混乱的架构依赖;但似乎没有办法告诉CXF“myschema.xsd”可以在http://myurl.com/myschema.xsd获得,但也可以在/src/main/schema/myschema.xsd中找到。