首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.xsd不是此编译的一部分。这对.xjb来说是个错误吗?

.xsd不是此编译的一部分。这对.xjb来说是个错误吗?
EN

Stack Overflow用户
提问于 2015-10-20 08:49:17
回答 7查看 22.1K关注 0票数 14

我试图将我的schemaLocation文件中的xjb更改为使用的不是远程文件,而是使用版本控制下的本地副本。

因此,例如,我的xjb文件有类似于

代码语言:javascript
复制
<?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">

例如,当我将其更改为本地副本时

代码语言:javascript
复制
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试图找到它,但在这种情况下,消息保持不变。

因此,似乎需要发生一些特定的事情,才能使其成为编译的一部分。要用正确的方式编译它,应该做些什么呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-11-23 13:42:06

在我的环境(2.2版)中,只有当文件位于专用文件夹( src/main/xsd/schema.xsd和binding /main/xsb/binding.xsb中的模式)和绑定文件相对引用模式时才能工作:schemaLocation=“./xsd/schema.xsd”

易碎真的是接缝。

票数 10
EN

Stack Overflow用户

发布于 2018-01-26 08:17:12

在插件配置中将xsd添加到pom-file中之后,它就开始工作了,如下所示:

代码语言:javascript
复制
                <bindingDirectory>
                    src/main/resources/binding
                </bindingDirectory>

                <bindingFiles>
                    <bindingFile>bindings.xjb</bindingFile>
                    <bindingFile>../xsd/egrul.xsd</bindingFile>
                    <bindingFile>../xsd/arrays.xsd</bindingFile>
                </bindingFiles>
票数 7
EN

Stack Overflow用户

发布于 2017-11-07 06:25:38

在考虑问题时,我可以建议以下步骤:

首先,假设您正在使用一些插件来生成存根。我使用cxf-codegen-plugin(您可以使用任何插件),重要的一步是定义绑定文件的位置,比方说它在资源\wsdl中。

下面是片段:

代码语言:javascript
复制
<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的片段

代码语言:javascript
复制
<jxb:bindings schemaLocation="YOUR_XSD_FILE.xsd" node="/xs:schema">
        .....
</jxb:bindings>

由于您已经在maven插件中定义了绑定文件路径,而且xsd也在该路径中,所以不必在绑定文件的schemaLocation中再次定义此路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33232039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档