问题
On my machine I have a WSDL file and all the necessary schema files. I am trying to use svcutil to create client proxy code from the WSDL. Command:
svcutil myfile.wsdl
I keep getting an error when using svcutil, but have no problems when loading the wsdl with soapUI if that means anything.
I keep getting this error:
Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Schema with target namespace 'http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0']/wsdl:portType[@name='areventservice']
Here is the WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="areventservice"
targetNamespace="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
xmlns:tns="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
xmlns:es="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0">
<wsdl:types>
<xsd:schema targetNamespace="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
xmlns:tns="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
xmlns:es="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0">
<xsd:include schemaLocation="arevent-service.xsd"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="SaveAREventWithShortNames">
<wsdl:part element="es:save-arevent-with-shortnames" name="SaveAREventWithShortNames"/>
</wsdl:message>
<wsdl:message name="RetrieveAREventByConsumerIdentifier">
<wsdl:part element="es:retrieve-arevent-by-consumer-agency-identifier" name="RetrieveAREventByConsumerIdentifier"/>
</wsdl:message>
<wsdl:message name="RetrieveAREventByConsumerAccountIdentifier">
<wsdl:part element="es:retrieve-arevent-by-consumer-account-agency-identifier" name="RetrieveAREventByConsumerAccountIdentifier"/>
</wsdl:message>
<wsdl:message name="RetrieveAREventResponse">
<wsdl:part element="es:retrieve-arevent-response" name="RetrieveAREventResponse"/>
</wsdl:message>
<wsdl:message name="SaveAREventResponse">
<wsdl:part element="es:save-arevent-response" name="SaveAREventResponse"/>
</wsdl:message>
<wsdl:portType name="areventservice">
<wsdl:operation name="SaveAREventWithShortNames">
<wsdl:input message="tns:SaveAREventWithShortNames" name="SaveAREventWithShortNames"/>
<wsdl:output message="tns:SaveAREventResponse" name="SaveAREventResponse"/>
</wsdl:operation>
<wsdl:operation name="RetrieveAREventByConsumerIdentifier">
<wsdl:input message="tns:RetrieveAREventByConsumerIdentifier" name="RetrieveAREventByConsumerIdentifier"/>
<wsdl:output message="tns:RetrieveAREventResponse" name="RetrieveAREventResponse"/>
</wsdl:operation>
<wsdl:operation name="RetrieveAREventByConsumerAccountIdentifier">
<wsdl:input message="tns:RetrieveAREventByConsumerAccountIdentifier" name="RetrieveAREventByConsumerAccountIdentifier"/>
<wsdl:output message="tns:RetrieveAREventResponse" name="RetrieveAREventResponseByAccountIdentifier"/>
</wsdl:operation>
</wsdl:portType>
Here is the schema file arevent-service.xsd (located in same directory as WSDL):
<?xml version="1.0" encoding="UTF-8"?>
<!-- (C)opyright 2004-2009 by CR Software, LLC - All Rights Reserved -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:as="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
targetNamespace="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
xmlns:common="http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import
schemaLocation="arevent-service-common.xsd"
namespace="http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0"/>
<xs:element name="save-arevent-with-shortnames" type="common:save-areventType" />
<xs:element name="retrieve-arevent-by-consumer-agency-identifier" type="common:retrieve-by-consumer-agency-idType" />
<xs:element name="retrieve-arevent-by-consumer-account-agency-identifier" type="common:retrieve-by-consumer-account-agency-idType" />
<xs:element name="retrieve-arevent-response" type="as:retrieve-arevent-responseType" />
<xs:complexType name="retrieve-arevent-responseType">
<xs:sequence>
<xs:element name="arevent-page-results" type="common:arevent-page-resultsType"
minOccurs="1" maxOccurs="1" >
<xs:annotation>
<xs:documentation>
arevent page results type
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="save-arevent-response" type="as:save-arevent-responseType" />
<xs:complexType name="save-arevent-responseType">
<xs:sequence>
<xs:element name="arevent" type="common:areventType"
minOccurs="1" maxOccurs="1" >
<xs:annotation>
<xs:documentation>
arevent type
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
The target namespaces all look like they match to me. Like I said, soapUI has not problem loading the wsdl.
I have no idea what to do.
回答1:
Either specify the paths to all of the WSDL and schema files on the command line, or else use "Add Service Reference", which will do that for you.
Note that "Add Service Reference" does work with files on your local system - not just for files at a URL.
来源:https://stackoverflow.com/questions/6849580/svcutil-from-wsdl-file-error-schema-with-target-namespace-could-not-be-found