I was able to solve this problem by adding [SoapRpcService()] in front
of the class definition:

[SoapRpcService()]
public class Calc : System.Web.Services.Protocols.SoapHttpClientProtocol

It has something to do with Apache requiring the "literal" encoding
style.

Derrick Brundage


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] 
Sent: Sunday, September 09, 2001 11:19 PM
To: [EMAIL PROTECTED]
Subject: Deserialization problem

Hi,
I am trying to invoke a .Net enabled web service using Java with Apache
SOAP toolkit.

I get the following exception:
[SOAPException: faultCode=SOAP-ENV:Client; msg=No Deserializer found to
deserialize a 'http://localh
ost/:AddResult' using encoding style
'http://schemas.xmlsoap.org/soap/encoding/'.; targetException=j
ava.lang.IllegalArgumentException: No Deserializer found to deserialize
a 'http://localhost/:AddResu
lt' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.]
        at org.apache.soap.rpc.Call.invoke(Call.java:246)
        at SoapClient1.main(SoapClient1.java:39)

Here's my trial code:
/*
 * SoapClient1.java
 *
 * Created on September 9, 2001, 5:15 PM
 */
// Required due to use of URL class , required by Call class
import java.net.*;

// Required due to use of Vector class
import java.util.*;

// Apache SOAP classes used by client
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;

/**
 *
 * @author  srahul
 * @version
 */
public class SoapClient1 {

    /** Creates new SoapClient1 */
    public SoapClient1() {
    }

    public static void main(String[] args) {
        Call call = new Call();
        call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
        call.setTargetObjectURI("urn:CalcSoap");
        call.setMethodName ("Add");
        Vector params=new Vector();
        params.addElement (new Parameter ("x", String.class, "1",
null));
        params.addElement(new Parameter ("y", String.class, "2", null));
        call.setParams(params);
        try {
            URL url = new URL ("http://161.85.17.164/calc.asmx";);
            Response resp = call.invoke(url, "http://localhost/Add";);
            if (resp.generatedFault()) {
                Fault fault=resp.getFault();
                System.out.println(" Fault code: " +
fault.getFaultCode());
                System.out.println(" Fault string:
"+fault.getFaultString());
            }
            Parameter result=resp.getReturnValue();
            Object o = result.getValue();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}



However i am able to iunvoke the service quite easily using c# and the
proxy code that
VStudio .Net generates.
Here's the proxy file that is generated by Vstudio.net (if it is of any
use...)
//----------------------------------------------------------------------
--------
// <autogenerated>
//     This code was generated by a tool.
//     Runtime Version: 1.0.2914.16
//
//     Changes to this file may cause incorrect behavior and will be
lost if
//     the code is regenerated.
// </autogenerated>
//----------------------------------------------------------------------
--------

namespace GeorgeCalc.WebReference1 {
    using System.Diagnostics;
    using System.Xml.Serialization;
    using System;
    using System.Web.Services.Protocols;
    using System.Web.Services;


    [System.Web.Services.WebServiceBindingAttribute(Name="CalcSoap",
Namespace="http://localhost/";)]
    public class Calc :
System.Web.Services.Protocols.SoapHttpClientProtocol {

        [System.Diagnostics.DebuggerStepThroughAttribute()]
        public Calc() {
            this.Url = "http://161.85.17.164/calc.asmx";;
        }

        [System.Diagnostics.DebuggerStepThroughAttribute()]
 
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://local
host/Add", RequestNamespace="http://localhost/";,
ResponseNamespace="http://localhost/";,
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)
]
        public int Add(int x, int y) {
            object[] results = this.Invoke("Add", new object[] {
                        x,
                        y});
            return ((int)(results[0]));
        }

        [System.Diagnostics.DebuggerStepThroughAttribute()]
        public System.IAsyncResult BeginAdd(int x, int y,
System.AsyncCallback callback, object asyncState) {
            return this.BeginInvoke("Add", new object[] {
                        x,
                        y}, callback, asyncState);
        }

        [System.Diagnostics.DebuggerStepThroughAttribute()]
        public int EndAdd(System.IAsyncResult asyncResult) {
            object[] results = this.EndInvoke(asyncResult);
            return ((int)(results[0]));
        }
    }
}


Can someone please let me know, what i am doing wrong here???

thanks!
==Rahul==
-------------------------------------------
[EMAIL PROTECTED]
Ph: 5579000 Extn: 1029
-------------------------------------------

Reply via email to