Я испытываю некоторый ад пространства имен схемы wsdl.
У меня есть WSDL, полученный из веб-службы Axis, и я пытаюсь создать заглушку с WCF для целей тестирования.
Проблема в том, что инструмент SVCUTIL генерирует код нормально, но при размещении никакие методы не предоставляются.
Я проверил WSDL, и есть строка, которая не проходит проверку. Я пытаюсь проверить, является ли это виновником, но пространства имен настолько беспорядочные, что я не могу разобраться с этим.
Итак, WSDL примерно такой. Я опустил привязки, службы и порты WSDL, так как хочу сосредоточиться на понимании проблемы пространств имен.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:axis2="http://p1-services.customer.com/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns0="http://returnobject.foo.bar.com/xsd"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:ns1="http://ws.receiver.foo.bar.com" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://p1-services.customer.com/">
<wsdl:documentation>WSP1IA01Service</wsdl:documentation>
<wsdl:types>
<xs:schema xmlns:ax22="http://returnobject.foo.bar.com/xsd"
attributeFormDefault="qualified"
elementFormDefault="qualified" targetNamespace="http://returnobject.foo.bar.com/xsd">
<xs:complexType name="ReturnEnvelope">
<xs:sequence>
<!-- Simplified -->
<xs:element minOccurs="0" name="errorCode" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema xmlns:ns="http://ws.receiver.foo.bar.com" attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://ws.receiver.foo.bar.com">
<xs:element name="setMessage">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="xmlMessage" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="setMessageResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="ns0:ReturnEnvelope"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
</wsdl:definitions>
Бит, который не проходит проверку, является ссылкой на ns0: ReturnEnvelope в элементе SetMessageResponse. Он говорит, что тип не может быть найден.
Я не могу понять почему, так как тип объявлен выше с targetNamespace, указывающим на префикс NS0.
Есть идеи? Должны ли эти объявления типов быть такими сложными?
Кроме того, какова цель этой конструкции:
<xs:schema xmlns:ax22="http://returnobject.foo.bar.com/xsd"
Я читал, что объявляет префикс "ax22" для дальнейшего использования в дочерних элементах. Но он не используется и сталкивается с пространством имен NS0.
Спасибо за любую помощь