2009-12-17 3 views
3

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке создать веб-службу в netbeans с помощью этого wsdl netbeans говорит, что никакой службы не определена. Я новичок во всей работе wsdl, но насколько я могу судить, есть один определенный.Проблема создания веб-службы из WSDL

WSDL, является:

<?xml version="1.0" encoding="UTF-8"?> 
<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="http://discoveryinsurance.com/DicQuoteSvc/AgencyQuote.wsdl" xmlns:ns="http://discoveryinsurance.com/DicQuoteSvc/schemas/DicAcordQuoteRq.xsd" xmlns:na="http://discoveryinsurance.com/DicQuoteSvc/schemas/DicAcordQuoteRs.xsd" targetNamespace="http://discoveryinsurance.com/DicQuoteSvc/AgencyQuote.wsdl"> 
<wsdl:import namespace="http://discoveryinsurance.com/DicQuoteSvc/schemas/" location="DicAcordQuoteRq.xsd"/> 
<wsdl:import namespace="http://discoveryinsurance.com/DicQuoteSvc/schemas/" location="DicAcordQuoteRs.xsd"/> 
<wsdl:types> 
    <xs:schema targetNamespace="http://discoveryinsurance.com/DicQuoteSvc/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="na:ACORD"/> 
</wsdl:message> 
<wsdl:portType name="QuotePortType"> 
    <wsdl:operation name="RequestQuote"> 
     <wsdl:input message="tns:NewMessageRequest"/> 
     <wsdl:output message="tns:NewMessageResponse"/> 
    </wsdl:operation> 
</wsdl:portType> 
<wsdl:binding name="QuoteBinding" type="tns:QuotePortType"> 
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <wsdl:operation name="RequestQuote"> 
     <soap:operation soapAction="http://discoveryinsurance.com/DicQuoteSvc/AgencyQuote" style="rpc"/> 
     <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="QuotePortType" binding="tns:QuoteBinding"> 
     <soap:address location="http://discoveryinsurance.com/DicQuoteSvc/"/> 
    </wsdl:port> 
</wsdl:service> 

XMLSpy говорит, что WSDL является действительным, но он терпит неудачу, когда я пытаюсь создать веб-сервис от него. Любая помощь была бы оценена даже конструктивной критикой.

EDIT

Использование wsimport от линии я вводе команды получить.

[ERROR] Invalid WSDL: операция "RequestQuote": его Rpc-буквальным операцию, Mes шалфей часть должна ссылаться на тип схемы декларации строки 16 файла:/D:/проектов/DICACORD/QuoteRq2 .wsdl

Означает ли это, что, несмотря на импорт двух xsd, мне все же нужно определить типы в wsdl?

Update 2

Схема для request->. Schema at pastie

Добавление

Кто-нибудь видит ничего плохого импорта XSD и/или как они используются?

+0

В каких рамках вы работаете. Весна делает это очень легко. – Zoidberg

+0

ТАКЖЕ, где ваш XSD? (схема) – Zoidberg

+0

схемы имеют более 250 строк. Позволит ли я опубликовать те, что большие? – ChadNC

ответ

1

Для того, чтобы ответить на мой собственный вопрос, причина, веб-сервис был не удалось создать из wsdl из-за использования wsdl:import вместо xs:import.

Я не знал об этом, но после выполнения еще нескольких исследований кажется, что wsdl: import следует использовать, когда вы хотите импортировать другой wsdl, но если вы хотите импортировать схему из a, чтобы использовать типы, определенные в ней, в wsdl вам нужно использовать xsd:import, потому что если не wsimport не найдет типы, определенные в схеме.

Я изменил

xmlns:ns="http://discoveryinsurance.com/DicQuoteSvc/schemas/DicAcordQuoteRq.xsd" 
xmlns:na="http://discoveryinsurance.com/DicQuoteSvc/schemas/DicAcordQuoteRs.xsd" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 

в

xmlns:rq="http://discoveryinsurance.com/DicQuoteSvc/schemas/request/" 
xmlns:rs="http://discoveryinsurance.com/DicQuoteSvc/schemas/response/" 

и изменил импорт из

<wsdl:import namespace="http://discoveryinsurance.com/DicQuoteSvc/schemas/" location="DicAcordQuoteRq.xsd"/> 
<wsdl:import namespace="http://discoveryinsurance.com/DicQuoteSvc/schemas/" location="DicAcordQuoteRs.xsd"/> 

в

<xs:import namespace="http://discoveryinsurance.com/DicQuoteSvc/schemas/request/" schemaLocation="DicAcordQuoteRq.xsd"/> 
<xs:import namespace="http://discoveryinsurance.com/DicQuoteSvc/schemas/response/" schemaLocation="DicAcordQuoteRs.xsd"/> 

Выполнение этих изменений позволило веб-службе успешно строить, а классы создавались на основе двух схем. Надеюсь, когда я начну тестировать веб-сервис в понедельник, он будет работать так, как я хочу. Спасибо всем вам за предоставленные вами материалы, поскольку это заставило меня задуматься о других причинах, по которым создание веб-службы из wsdl не получилось.

Я изменил пространство имен, в котором они находятся, но это было по разным причинам, и я сделал это после того, как веб-служба была создана и развернута локально на моей машине.

Счастливые праздники каждый.

5

Самый простой способ проверить, что WSDL является действительным является для запуска из командной строки:

wsimport yourservice.wsdl 

и посмотреть, если это дает вам какие-либо ошибки. wsimport поставляется с JDK 1.6

WSDL, который вы отправили, не является полным, так как он имеет ссылки на внешние файлы схемы (XSD), поэтому мне не удастся его проверить.

0

ACORD находится в пространстве имен http://discoveryinsurance.com/DicQuoteSvc/schemas/DicAcordQuoteRq.xsd.

Мне кажется, что ваш импорт ACORD является недействительным, в том, что она идентифицирует пространство имен Acord по-разному:

<wsdl:import namespace="http://discoveryinsurance.com/DicQuoteSvc/schemas/" location="DicAcordQuoteRq.xsd"/>

Смежные вопросы