我为几个Web服务(来自服务器服务定义)生成WSDL文件,其中我已经为用作参数的bean创建了XML模式(* .XSD)。我如何告诉java2ws引用这些(包括外部XSD)而不是在WSDL中生成它自己的?
我已经尝试过-createxsdimports,但它会生成自己的XSD文件。
我是否可以使用Java Annotation让CXF知道每个文件/包的XSD在哪里?
答案 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中找到。