XJC [错误] XPath 对"//*[local-name()='schema']"的评估结果为空目标节点



我是XJC的新手。我试图使用一个WSDL并使用XJC命令生成绑定类,但我得到了以下错误:

C:jaxb>xjc -verbose -b c:jaxbbindings-wsdl.xjb -wsdl c:jaxbBioMetScrnSvc.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.

我的绑定文件如下:

<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">
 ...

从我从这个网站上读到的所有建议中,我已经在绑定文件中包含了必要的命名空间,但没有用。我已经测试了Xpath,它是正确的。

如果我没有绑定文件,则会生成JAXBElement而不是String。理解这是因为minOccurs和nillable同时出现。

谨致问候,Wes

我无法使绑定与node一起工作。这可能是XJC中的一个错误,我会检查/向Oracle报告。

但是SCD绑定确实有效!所以这里有一个解决方案。制作一个名为"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

最新更新