我正在尝试更改schemaLocation
文件中的xjb
以使用不是使用URL的远程文件,而是使用也受版本控制的本地副本。
例如,我的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
将失败并显示类似于
[警告]引起:com.sun.istack.SAXParseException2; 的systenId: 文件:/ E:/somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb; lineNumber:33; columnNumber:33; “文件:/ E:/somefolder/somefolder/myjavaproject/target/bindings/mywsdl.wsdl” 不是这个汇编的一部分。这是一个错误 “文件:/ E:/somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb”?
我注意到它正在target
目录中查找我的wsdl文件。我可以以指向schemaLocation
目录的方式操纵src
。然后路径存在,但消息仍然存在。
我也可以将wsdl放在目标目录中,java尝试查找它,但在这种情况下,消息保持不变。
所以看起来需要特定的东西来使它成为这个编译的一部分。应该怎么做才能以正确的方式编译它?
答案 0 :(得分:2)
在插件配置中将我的xsd添加到pom文件后,它开始工作,如下所示:
<bindingDirectory>
src/main/resources/binding
</bindingDirectory>
<bindingFiles>
<bindingFile>bindings.xjb</bindingFile>
<bindingFile>../xsd/egrul.xsd</bindingFile>
<bindingFile>../xsd/arrays.xsd</bindingFile>
</bindingFiles>
答案 1 :(得分:1)
在查看问题时,我可以建议以下步骤:
首先,假设您使用一些插件来生成存根。我使用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 generate-sources”时,maven知道在哪里查找绑定文件。我们假设你也把你的xsd文件放在resources \ wsdl文件夹中(你可以有任何路径)
我们来看看binding.xml的片段
<jxb:bindings schemaLocation="YOUR_XSD_FILE.xsd" node="/xs:schema">
.....
</jxb:bindings>
由于您已经在maven插件中定义了绑定文件路径,并且您的xsd也在该路径中,因此您无需在绑定文件的schemaLocation中再次定义此路径。
答案 2 :(得分:0)
我取得了成功
将架构和绑定放在src / main / resources
中的src /主/资源/ myxsd.xsd
的src /主/资源/ mybindings.xjb
指向要运行xjc的maven插件以查找那里的文件
在绑定文件中使用
的schemaLocation =&#34; myxsd.xsd&#34;
如果你想在src / main / resources下添加一些目录,你当然可以这样做 - 你必须找出在指定schemaLocation时使用的正确相对路径。
答案 3 :(得分:0)
我在编译期间收到此错误,因为我的IDE在JAXB编译的软件包下添加了一个class RevPashPageView(TemplateView):
template_name = "softrest/revPash.html"
def get(self, request, *args, **kwargs):
content = request.GET.get('content', None)
print("TEXTO - " + str(content))
date_range = request.GET.get("ref_date", None) # This is your variable
return render(request, self.template_name, {'output':output})
目录。通过使用bin/
或rm -rf BaseDirectory/bin/
进行了修复。后者可能更好/更完整。
(我很少使用的Eclipse将输出编译成rm -rf BaseDirectory; git co BaseDirectory
,而IntelliJ IDEA或原始gradle编译成bin/
)
答案 4 :(得分:0)
就我而言,我只需要更新maven-jaxb2-plugin版本:
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>