java - XJC [错误] "//*[local-name()=' 架构的 XPath 评估']“导致目标节点为空

标签 java xpath jaxb wsdl xjc

我是 XJC 的新手。我尝试使用 WSDL 并使用 XJC 命令生成绑定(bind)类,但出现以下错误:

C:\jaxb>xjc -verbose -b c:\jaxb\bindings-wsdl.xjb -wsdl c:\jaxb\BioMetScrnSvc.wsdl
parsing a schema...
[ERROR] XPath evaluation of "//*[local-name()='schema']" results in empty target node
line 8 of file:/C:/jaxb/bindings-wsdl.xjb

Failed to parse a schema.

我的绑定(bind)文件如下:

<jaxb:bindings version="2.1" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:impl="http://www.openuri.org/" 
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:intf="http://www.openuri.org/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <jaxb:bindings node="//*[local-name()='schema']">
        <jaxb:globalBindings generateElementProperty="false"/> 
    </jaxb:bindings>
</jaxb:bindings> 

提供给我的 WSDL 如下:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://www.openuri.org/"
 xmlns:impl="http://www.openuri.org/"
 xmlns:apachesoap="http://xml.apache.org/xml-soap"    
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:intf="http://www.openuri.org/">
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://www.openuri.org/" 
 xmlns="http://www.w3.org/2001/XMLSchema">
 ...

根据我从该网站读到的所有建议,我已将必要的命名空间包含到绑定(bind)文件中,但无济于事。我已经测试了Xpath,它是正确的。

如果我没有绑定(bind)文件,则会生成 JAXBElement 而不是字符串。理解是因为 minOccurs 和 nillable 一起出现。

问候, 韦斯

最佳答案

我无法使绑定(bind)与 node 一起使用。这可能是 XJC 中的一个错误,我会检查/报告给 Oracle。

但是 SCD 绑定(bind)确实有效!所以这里有一个适合您的解决方案。创建一个名为“wsdl.xjb”的文件并将以下代码放入其中。并将其放在与 example.wsdl 文件相同的文件夹中(为了简单起见,或者您可以放在任何地方,然后您需要提及其路径)。

<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    jaxb:version="2.0">

    <jaxb:bindings scd="x-schema::tns" xmlns:tns="http://www.openuri.org/">
        <jaxb:globalBindings generateElementProperty="false"/>
    </jaxb:bindings>

</jaxb:bindings>

您需要包含一个 -extension 命令开关,最终命令将如下所示:

xjc -extension -verbose -wsdl example.wsdl -b wsdl.xjb

关于java - XJC [错误] "//*[local-name()=' 架构的 XPath 评估']“导致目标节点为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26418355/

相关文章:

java - 不同子类中的相同实现

java - 在java字符串中用\u替换\\u

java - 如何跳过格式正确性检查 XML

java - 如何使用在多个文件 (.xml) 中具有共享引用的 JAXB 解码文件

java - JAXB 和 Guice : How to integrate and visualize?

java - 如何从 JTextField 获取用户输入?

java - 如何向调用者方法发送成功消息?

java - 如何检索属性的值

regex - Selenium :是否可以在 Selenium 定位器中使用正则表达式

java - JAXB 中具有属性的元素