[Axis 1.3] inHeader parameter вопросик
От: mProfi  
Дата: 19.07.06 11:16
Оценка:
Здрасьте,

У меня тут такой ляп с SOAP header параметрами в Аксисе. Вот пример метод, который описан в wsdd

<operation name="logoff" qname="operNS:logoff"
xmlns:operNS="urn:mycompany"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><http://www.w3.org/2001/XMLSchema&gt;
soapAction="" >
<parameter qname="sessionHeader" type="tns:SessionHeader"
xmlns:tns="urn:mycompany" inHeader="true"/>
</operation>

<operation name="queryEO" qname="operNS:queryEO"
xmlns:operNS="urn:mycompany" returnQName="queryEOReturn"
returnType="rtns:ArrayOfEnterpriseObject" xmlns:rtns="urn:mycompany"
returnItemType="tns2:EnterpriseObject" xmlns:tns2="urn:mycompany" soapAction=""
>
<parameter qname="qlExpression" type="tns:string" xmlns:tns="
http://www.w3.org/2001/XMLSchema"/ ><http://www.w3.org/2001/XMLSchema&gt;&gt;
<parameter qname="Definition_ID" type="tns:long" xmlns:tns="
http://www.w3.org/2001/XMLSchema"/ ><http://www.w3.org/2001/XMLSchema&gt;&gt;
<parameter qname="sessionHeader" type="tns:SessionHeader"
xmlns:tns="urn:mycompany" inHeader="true"/>
</operation>

Как можно увидеть оба метода используют один и тотже параметр, то есть мне бы этого очень хотелось, но в итоге получается, что они используют совершенно разные параметры. То есть когда аксис посылает SOAP пакет для этих параметров используются совершенно разные namaspace. Вот пару глюков, которые обнаружены:

1) В wsdl эти параметры присутствуют как elements sessionHeader,
sessionHeader1. Поэтому на клиенте я должен указать явно, что надо положить эти два параметра в header

binding.setHeader(locator.getServiceName().getNamespaceURI(),
"sessionHeader", new SessionHeader(sessionHeaderObject));
binding.setHeader(locator.getServiceName().getNamespaceURI(),
"sessionHeader1", new SessionHeader(sessionHeaderObject));

Итак я имею дублирование параметров. А надо мне добиться того, чтобы клиент только делал вот такие действия:

binding.setHeader(locator.getServiceName().getNamespaceURI(),
"sessionHeader", new SessionHeader(sessionHeaderObject));

Может я что-то упустил в описании wsdd или необходимо сделать некие манипуляции с axis?

2) Второй глюк — это то, что обо метода по-разному генеряться на клиенте, то есть они имеют разные прототипы для .NET, Java-Axisple

//java code
void logoff(String sessionId); // sessionId parameter is optinal
// how it declare in wsdd
<operation name="logoff" qname="operNS:logoff"
xmlns:operNS="urn:mycompany"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><http://www.w3.org/2001/XMLSchema&gt;
soapAction="" >
<parameter qname="sessionHeader" type="tns:SessionHeader"
xmlns:tns="urn:mycompany" inHeader="true"/>
</operation>

Но для NET у меня совершенно другой прототип:
void logoff();

Может что-то надо настроить чтобы все было одинаково и в Джаве и в .NET? Просто я работал с Salesforce — там выполнен аналогичный подход с SOAP header параметрами и нет такого различия в прототипах методов.

--
Thanks for any your help,
Yura.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.