Cha*_*dNC 3 java wsdl web-services netbeans6.8
我最近一直在研究符合ACORD P&C的Web服务,并且遇到了一些麻烦,因为wsimport错误地说它无法解析其中一个xsd文件.错误消息是:
[ERROR] Unable to parse "D:\projects\DICACORD\DicAcordQuoteRq.xsd" : Illegal character in opaque part at index 2: D:\projects\DICACORD\DicAcordQuoteRq.xsd
Run Code Online (Sandbox Code Playgroud)
我创建的模式基于ACORD P&C模式(超过23k行),我只包含了公司需要使用的必需元素.我使用XMLSpy创建了模式,根据其验证,模式是有效的,但是当我尝试在netbeans 6.8中创建Web服务时,我收到上面的错误消息.
模式在我的开发机器上,根据我在netbeans论坛上可以找到的内容,netbeans将wsdl复制到项目内部的一个目录中,这样当你将它从开发转移到生产时,一切都仍然像它应该的那样工作.
wsdl如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2010 -->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="discoveryinsurance.com/schemas" xmlns:ns="discoveryinsurance.com/schemas/acordRq" xmlns:ns1="discoveryinsurance.com/schemas/acordRs" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="discoveryinsurance.com/schemas">
<wsdl:import namespace="discoveryinsurance.com/schemas/acordRq" location="D:\projects\DICACORD\DicAcordQuoteRq.xsd"/>
<wsdl:import namespace="discoveryinsurance.com/schemas/acordRs" location="D:\projects\DICACORD\DicAcordQuoteRs.xsd"/>
<wsdl:types>
<xs:schema targetNamespace="discoveryinsurance.com/schemas" elementFormDefault="qualified"/>
</wsdl:types>
<wsdl:message name="NewMessageRequest">
<wsdl:part name="parameter" element="ns:ACORD"/>
</wsdl:message>
<wsdl:message name="NewMessageResponse">
<wsdl:part name="parameter" element="ns1:ACORD"/>
</wsdl:message>
<wsdl:portType name="QuotePort">
<wsdl:operation name="QuoteRequest">
<wsdl:input name="quoteInput" message="tns:NewMessageRequest"/>
<wsdl:output name="quoteOutput" message="tns:NewMessageResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AgencyQuoteSOAP" type="tns:QuotePort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="QuoteRequest">
<soap:operation soapAction="urn:QuoteRequest" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AgencyQuote">
<wsdl:port name="QuotePort" binding="tns:AgencyQuoteSOAP">
<soap:address location="http://localhost:8084/DicQuoteSvc/AgencyQuote"/>
</wsdl:port>
</wsdl:service>
Run Code Online (Sandbox Code Playgroud)
我觉得这与名称空间有关,但我不确定.这也是我第一次尝试以这种方式创建Web服务,因为我认为我会节省一些开发时间.
我试过谷歌搜索错误消息,我读到的所有内容都指向错误的URI.我认为XMLSpy的验证会捕获这样的错误,但如果这是问题,那么它就无法捕获它.
任何帮助将不胜感激,我很乐意提供任何其他所需的信息.
关于wsdl:import元素,WSDL 1.1规范说:
WSDL允许使用import语句将名称空间与文档位置相关联:
Run Code Online (Sandbox Code Playgroud)<definitions .... > <import namespace="uri" location="uri"/> * </definitions>(......)
URI可能是绝对的或相对的,但是你的URI显然是无效的.
当然,您可以尝试指定绝对URI,可能使用file://和/或正斜杠.但在您的情况下,我认为您应该将您的XSD放在WSDSL旁边并使用相对URI,如下所示:
<wsdl:import namespace="discoveryinsurance.com/schemas/acordRq" location="DicAcordQuoteRq.xsd"/>
<wsdl:import namespace="discoveryinsurance.com/schemas/acordRs" location="DicAcordQuoteRs.xsd"/>
Run Code Online (Sandbox Code Playgroud)