Closed Bug 373300 Opened 17 years ago Closed 17 years ago

Passing parameters to any webservice through XMLRPC from java every time fails

Categories

(Bugzilla :: WebService, defect)

defect
Not set
major

Tracking

()

RESOLVED INVALID

People

(Reporter: pavel, Unassigned)

Details

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
Build Identifier: bugzilla3.0rc1

System: Linux ubuntu
Bugzilla 3.0rc1
Perl: This is perl, v5.8.8 built for i486-linux-gnu-thread-multi

If i try to use any webservice through /xmlrpc.cgi and method which requires parameter (methods which doesn't requiers parameters works well) i get response 
as 
<?xml version="1.0" encoding="UTF-8"?><methodResponse><fault><value><struct><member><name>faultString</name><value><string>Can't use string ("pavel@tradsports.com") as a HASH ref while "strict refs" in use at Bugzilla/WebService/User.pm line 39.
</string></value></member><member><name>faultCode</name><value><string>Server</string></value></member></struct></value></fault></methodResponse>

Tha apache error log shows: 
Use of uninitialized value in pattern match (m//) at /usr/local/share/perl/5.8.8/SOAP/Transport/HTTP.pm line 411.

Probably it is connected.

The second problem is that response above from /xmlrpc.cgi is probably not valid response because during parsing it fails on:

java.lang.ClassCastException: java.lang.String
        at org.apache.xmlrpc.parser.XmlRpcResponseParser.addResult(XmlRpcResponseParser.java:55)
        at org.apache.xmlrpc.parser.RecursiveTypeParserImpl.endValueTag(RecursiveTypeParserImpl.java:71)
        at org.apache.xmlrpc.parser.XmlRpcResponseParser.endElement(XmlRpcResponseParser.java:164)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
        at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:177)
        at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:146)
        at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:94)
        at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:39)
        at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:53)
        at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
        at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:157)
        at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:146)
        at rpcclient.RPCClient.main(RPCClient.java:109)

Thanks for any help i like bugzilla but we need to add functionality to enter bug from other system. Is there any other possibility tham xmlrpc? I know nothing about perl so may be it some easy thing but i could'b find any solution.



Reproducible: Always

Steps to Reproduce:
1. I used code for XMLRPC java client from http://wiki.mozilla.org/Testopia:Documentation:XMLRPC

2. Run it on webservice and method which needs parameter like User.login

3. See the response
Actual Results:  
<?xml version="1.0" encoding="UTF-8"?><methodResponse><fault><value><struct><member><name>faultString</name><value><string>Can't use string ("pavel@tradsports.com") as a HASH ref while "strict refs" in use at Bugzilla/WebService/User.pm line 39.
</string></value></member><member><name>faultCode</name><value><string>Server</string></value></member></struct></value></fault></methodResponse>


Expected Results:  
Login parameters

My XMLRPC client:

/*
 * Main.java
 *
 * Created on 08 March 2007, 11:39
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package rpcclient;

/**
 *
 * @author psavara
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

import java.net.URL;
import java.util.ArrayList;

// Needed for SSL
import java.security.cert.X509Certificate;
import java.util.HashMap;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.xml.sax.InputSource;

public class RPCClient
{
 	// 
 	// Trust All Certificates - Needed for SSL Client
 	// 
	private static void TrustAllCerts()
		throws java.security.NoSuchAlgorithmException,
		       java.security.KeyManagementException  
	{
		// Create a trust manager that does not validate certificate chains

		TrustManager[] trustAllCerts = new TrustManager[] 
	    {
	        new X509TrustManager() 
	        {
	            public X509Certificate[] getAcceptedIssuers() 
	            {
	                return null;
	            }
	 
	            public void checkClientTrusted(X509Certificate[] certs, String authType) 
	            {
	                // Trust always
	            }
	 
	            public void checkServerTrusted(X509Certificate[] certs, String authType) 
	            {
	                // Trust always
	            }
	        }
	    };
	 
	    // Install the all-trusting trust manager
	    SSLContext sc = SSLContext.getInstance("SSL");
	    
	    // Create empty HostnameVerifier
	    HostnameVerifier hv = new HostnameVerifier() 
	    {
	    	public boolean verify(String arg0, SSLSession arg1) 
	    	{
	    		return true;
	        }
	    };

	    sc.init(null, trustAllCerts, new java.security.SecureRandom());
	    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
	    HttpsURLConnection.setDefaultHostnameVerifier(hv);
	}
 
	public static void main(String[] args)
	{
 		try
		{
		    TrustAllCerts();

		    XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
		    config.setServerURL(new URL("http://workhorse/xmlrpc.cgi"));


		    XmlRpcClient client = new XmlRpcClient();
		    client.setConfig(config);

		    ArrayList<Object> params = new ArrayList<Object>();
		    //params.add(1);
                    params.add("test@test.com");
                    params.add("test");
                    //params.add(true);

                    ArrayList<Object> params1 = new ArrayList<Object>();
                    params1.add(params);
		    //HashMap result = (HashMap) client.execute("Product.get_accessible_products", new ArrayList());
                    Object result = (Object) client.execute("User.login", params);

		    System.out.println(result);
		}
 		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}
Version: unspecified → 3.0
You're adding the parameters incorrectly. Parameters for the Bugzilla XML-RPC interface are not an array. They are a hash.

The documentation you referred to was for Testopia, not for Bugzilla.

If you have a support question about Bugzilla, ask at on the bugzilla-support list, described at:

http://www.bugzilla.org/support/
Status: UNCONFIRMED → RESOLVED
Closed: 17 years ago
OS: Linux → All
Hardware: PC → All
Resolution: --- → INVALID
You need to log in before you can comment on or make changes to this bug.