Title: RE: Axis client to .NET server problems

I suggest that you run wsdl2java and use the generated stub rather than using the DII call interface.

 

The wrapped style (which automatically marshals your parameters) doesn’t work with the call interface. It works only when using the stub or dynamic proxy interface.

You can’t use rpc/literal with this WSDL because rpc/literal automatically makes the parameters unqualified (per the WS-I Basic Profile rules). If you want to use document/literal with the call interface then you have only one parameter – the IsUserEntitled structure.

 

Anne

 


From: Peter S. Ng [mailto:[EMAIL PROTECTED]
Sent: Friday, September 24, 2004 3:32 PM
To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: RE: Axis client to .NET server problems

 

Hi, I altered the operation style to "document" in the Call object, but when the request shows up as:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
  <PartnerIdentity xmlns="">[EMAIL PROTECTED]</PartnerIdentity>
  <PartnerEvidence xmlns="">09242004153635957:MjAxZTkxMDgyZDMzMjhlZmYxZWU1M2MxYjFjN2NiMjI=</PartnerEvidence>
  <UserIdentity xmlns="">166.154.160.251</UserIdentity>
  <UserEvidence xmlns="">[EMAIL PROTECTED]</UserEvidence>
  <ProductID xmlns="">800002</ProductID>
  <ProductVersion xmlns="">1.0</ProductVersion>
 </soapenv:Body>

without the <isUserEntitled></isUserEntitled> method name wrapping the parameters in the body... is there a way to create a document/literal style that i need?  sorry if this is a simplistic question, but i've been banging on this problem for a while...

thanks again!

-----Original Message-----
From: Sunkara, Jayachandra S [mailto:[EMAIL PROTECTED]]
Sent: Fri 9/24/2004 1:09 PM
To: [EMAIL PROTECTED]
Subject: RE: Axis client to .NET server problems

Make sure you don't have your client configured to send the soap message
in the RPC/literal style.

Follow DOCUMENT/literal style. That should work fine. That's what I did,
when I experienced similar problem interoping with a .NET server. .NET
by default assumes DOC/lit style I guess.



HTH

jayachandra

  _____ 

From: Peter S. Ng [mailto:[EMAIL PROTECTED]]
Sent: Friday, September 24, 2004 10:20 PM
To: [EMAIL PROTECTED]
Subject: Axis client to .NET server problems



Hi,

I have created a client using AXIS to talk to a .NET service....
however, I always this error:
-------------
http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException:
SimpleDeserializer encountered a child element, which is NOT expected,
in something it was trying to deserialize.
        at
org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeser
ializer.java:148)
        at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:1001)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
159)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:1050)
        at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:196)
        at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:310)
        at org.apache.axis.client.Call.invoke(Call.java:2381)
        at org.apache.axis.client.Call.invoke(Call.java:2280)
        at org.apache.axis.client.Call.invoke(Call.java:1741)
        at
com.kargo.verizon.soap.VerizonBillingSoapModule.isUserEntitled(VerizonBi
llingSoapModule.java:116)
        at
com.kargo.verizon.soap.VerizonBillingSoapModule.main(VerizonBillingSoapM
odule.java:170)

---------------------
Here is the WDSL snippet of the .NET service i want to call:

<s:schema elementFormDefault="qualified"
targetNamespace="http://www.company.com/Partners/">
      <s:element name="IsUserEntitled">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="PartnerIdentity" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1"
name="PartnerEvidence" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="UserIdentity"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="UserEvidence"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="ProductID"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="ProductVersion"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
</s:schema>

--------------------
my axis client is sending this request to that service:

POST /PartnerServices/PartnerServiceLocator.asmx?WSDL HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related,
text/*
User-Agent: Axis/1.2beta
Host: 209.11.32.229:7071
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: "http://www.company.com/Partners/IsUserEntitled"
Content-Length: 754
Authorization: Basic S2FyZ29ASU5TUFBhcnRuZXIuY29tOjl0NC5TZ3lYSzA=

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
  <IsUserEntitled xmlns="http://www.InfoSpace.com/Partners/">
   <PartnerIdentity xmlns="">[EMAIL PROTECTED]</PartnerIdentity>
   <PartnerEvidence
xmlns="">09242004123247610:YTM2MzUyYjQ4ZDFhNTA1NjMwZTliMThiMzBjNWQ5NWI=<
/PartnerEvidence>
   <UserIdentity xmlns="">166.154.xxx.xxxx</UserIdentity>
   <UserEvidence xmlns="">05609EEFA140D10CAC</UserEvidence>
   <ProductID xmlns="">800002</ProductID>
   <ProductVersion xmlns="">1.0</ProductVersion>
  </IsUserEntitled>
 </soapenv:Body>
---------------------------
i believe the problem is that all the parameters are specifying
"xmlns="" " and the .NET service is asking for qualified namespaces... i
believe the solution is to try and remove the xmlns="" from the
parameters like so:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
  <IsUserEntitled xmlns="http://www.InfoSpace.com/Partners/">
   <PartnerIdentity>[EMAIL PROTECTED]</PartnerIdentity>

<PartnerEvidence>09242004123247610:YTM2MzUyYjQ4ZDFhNTA1NjMwZTliMThiMzBjN
WQ5NWI=</PartnerEvidence>
   <UserIdentity>166.154.160.251</UserIdentity>
   <UserEvidence>[EMAIL PROTECTED]</UserEvidence>
   <ProductID>800002</ProductID>
   <ProductVersion>1.0</ProductVersion>
  </IsUserEntitled>
 </soapenv:Body>
-----------------------
however, in the various ways i have set up my axis client, i can't get
the request to be formatted in this way.  i am fairly new to using axis,
so i may not be configuring it correctly to do what i want it to do...
here is the code snippet:
      
           Service service = new Service();
            Call call = (Call) service.createCall();

            // Set username/password
            call.setUsername(_partnerId);
            call.setPassword(_password);

            // Set the target service to send to
            System.setProperty("java.protocol.handler.pkgs",
                    "com.sun.net.ssl.internal.www.protocol");
            Security.addProvider(new Provider());
            URL targetUrl = new URL(_targetEndpoint2);

            call.setTargetEndpointAddress(targetUrl);

            call.setOperationName(new QName(
                    "http://www.company.com/Partners/",
"IsUserEntitled"));
            call.setOperationStyle("rpc");
            call.setOperationUse("literal");

            // Map the parameter names to the soap method
            call.addParameter("PartnerIdentity", XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter("PartnerEvidence", XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter("UserIdentity", XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter("UserEvidence", XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter("ProductID", XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.addParameter("ProductVersion", XMLType.XSD_STRING,
                    ParameterMode.IN);
            call.setReturnType(XMLType.XSD_STRING);          
            call.setProperty(Call.SOAPACTION_USE_PROPERTY, new
Boolean(true));
            call.setProperty(Call.SOAPACTION_URI_PROPERTY,
"http://www.company.com/Partners/IsUserEntitled");

            // Invoke the soap call here calling this object method
            System.out.println("Invoking call....");     
        (String) call.invoke(new Object[] { _partnerId,
                    _partnerEvidence, userId, userEvidence, productId,
                    productVersion });

---------------
any suggestion as to what i am doing wrong?  any help would be
appreciated...

thanks,
peter

Reply via email to