我试图将我的schemaLocation文件中的xjb更改为使用的不是远程文件,而是使用版本控制下的本地副本。
因此,例如,我的xjb文件有类似于
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsd:ID="JaxbBindingsForWMiddleware"
version="2.0">
<jxb:bindings node="/xsd:schema"
schemaLocation="http://myserver:80/a/b/c/d/myxsd.xsd">例如,当我将其更改为本地副本时
schemaLocation="../../src/main/resources/myxsd.xsd">mvn clean install将失败的消息类似于
由以下原因引起的警告: file:/E:/somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb;;systemId: com.sun.istack.SAXParseException2 lineNumber: 33;columnNumber: 33;"file:/E:/somefolder/somefolder/myjavaproject/target/bindings/mywsdl.wsdl“不是此编译的一部分。这对"file:/E:/somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb"?来说是个错误吗?
我注意到它正在target目录中查找wsdl文件。我可以以这样的方式操作schemaLocation,使它指向src目录。然后路径就存在了,但是消息仍然存在。
我还可以将wsdl放在目标目录中,在目标目录中,java试图找到它,但在这种情况下,消息保持不变。
因此,似乎需要发生一些特定的事情,才能使其成为编译的一部分。要用正确的方式编译它,应该做些什么呢?
发布于 2015-11-23 13:42:06
在我的环境(2.2版)中,只有当文件位于专用文件夹( src/main/xsd/schema.xsd和binding /main/xsb/binding.xsb中的模式)和绑定文件相对引用模式时才能工作:schemaLocation=“./xsd/schema.xsd”
易碎真的是接缝。
发布于 2018-01-26 08:17:12
在插件配置中将xsd添加到pom-file中之后,它就开始工作了,如下所示:
<bindingDirectory>
src/main/resources/binding
</bindingDirectory>
<bindingFiles>
<bindingFile>bindings.xjb</bindingFile>
<bindingFile>../xsd/egrul.xsd</bindingFile>
<bindingFile>../xsd/arrays.xsd</bindingFile>
</bindingFiles>发布于 2017-11-07 06:25:38
在考虑问题时,我可以建议以下步骤:
首先,假设您正在使用一些插件来生成存根。我使用cxf-codegen-plugin(您可以使用任何插件),重要的一步是定义绑定文件的位置,比方说它在资源\wsdl中。
下面是片段:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/YOUR_WSDL_NAME.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/YOUR_WSDL_NAME.wsdl</wsdlLocation>
<extraargs>
<extraarg>-xjc-Xts</extraarg>
</extraargs>
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/wsdl/binding.xml</bindingFile>
</bindingFiles>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.cxf.xjcplugins</groupId>
<artifactId>cxf-xjc-ts</artifactId>
<version>${cxf.version}</version>
</dependency>
</dependencies>
</plugin>接下来,在执行"mvn生成源“时,maven知道在哪里查找绑定文件。让我们假设您也将xsd文件放在资源\wsdl文件夹中(您可以有任何路径)
让我们看看binding.xml的片段
<jxb:bindings schemaLocation="YOUR_XSD_FILE.xsd" node="/xs:schema">
.....
</jxb:bindings>由于您已经在maven插件中定义了绑定文件路径,而且xsd也在该路径中,所以不必在绑定文件的schemaLocation中再次定义此路径。
https://stackoverflow.com/questions/33232039
复制相似问题