[Pljava-dev] one static method disappearing when second one is defined?!

From: bgiles at coyotesong(dot)com (Bear Giles)
To:
Subject: [Pljava-dev] one static method disappearing when second one is defined?!
Date: 2011-12-30 03:48:17
Message-ID: CALBNtw7pC1TjQkdVcVkdGMzm2MxfQgqRG5-6Ap17Zmf0za8RLA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pljava-dev

I've hit a very weird problem. I'm working on a class that provides
information about the java crypto providers via ResultSetProviders. Code
below. If I comment out the 'listServices()' methods then I can deploy the
jar and run listProviders() without a problem. If I uncomment either
listServices() method then I get an error when running the previously
successful listProviders() call. IMPORTANT: I'm not making any calls to
listServices(), I'm calling a method that I've successfully called before
with an unchanged ddr configuration.

ERROR: Unable to find static method sandbox.Crypto.listProviders with
signature ()Lorg/postgresql/pljava/ResultSetProvider;

I'm not seeing any compiler or postgresql errors and the jar file contains
a Crypto class (although I haven't disassembled it yet). Any ideas?

Thanks,

Bear

CREATE TYPE javatest.provider_info AS (
provider VARCHAR,
version FLOAT8,
info VARCHAR
);

CREATE TYPE javatest.service_info AS (
provider VARCHAR,
service VARCHAR,
algorithm VARCHAR
);

CREATE FUNCTION javatest.list_providers()
RETURNS SETOF javatest.provider_info
AS 'sandbox.Crypto.listProviders'
LANGUAGE java;

CREATE FUNCTION javatest.list_providers(varchar)
RETURNS SETOF javatest.provider_info
AS 'sandbox.Crypto.listProviders'
LANGUAGE java;

CREATE FUNCTION javatest.list_services()
RETURNS SETOF javatest.service_info
AS 'sandbox.Crypto.listServices'
LANGUAGE java;

CREATE FUNCTION javatest.list_services(varchar)
RETURNS SETOF javatest.service_info
AS 'sandbox.Crypto.listServices'
LANGUAGE java;

public class Crypto {

public static ResultSetProvider listProviders() {
return new ProviderResultSetProvider(Security.getProviders());
}

public static ResultSetProvider listProviders(String provider) {
Provider p = Security.getProvider(provider);
if (p == null) {
return null;
}
return new ProviderResultSetProvider(new Provider[] { p });
}

public static ResultSetProvider listServices() {
List<Provider.Service> services = new ArrayList<Provider.Service>();

for (Provider provider : Security.getProviders()) {
services.addAll(provider.getServices());
}

return new ServiceResultSetProvider(services.toArray(new
Provider.Service[0]));
}

public static ResultSetProvider listServices(String provider) {
Provider p = Security.getProvider(provider);
if (p == null) {
return null;
}
return new ServiceResultSetProvider(p.getServices().toArray(new
Provider.Service[0]));
}

public static class ProviderResultSetProvider implements
ResultSetProvider {
private Provider[] providers;
public ProviderResultSetProvider(Provider[] providers) {
// make defensive copy
this.providers = providers.clone();
}

/**
* @see
org.postgresql.pljava.ResultSetProvider#assignRowValues(java.sql.ResultSet,
int)
*/
@Override
public boolean assignRowValues(ResultSet receiver, int currentRow)
throws SQLException {
if (providers == null || currentRow < 0 || currentRow >
providers.length-1) {
return false;
}

receiver.updateString("provider",
providers[currentRow].getName());
receiver.updateDouble("version",
providers[currentRow].getVersion());
receiver.updateString("info", providers[currentRow].getInfo());

return true;
}

/**
* @see org.postgresql.pljava.ResultSetProvider#close()
*/
@Override
public void close() throws SQLException {
providers = null;
}
}

public static class ServiceResultSetProvider implements
ResultSetProvider {
private Provider.Service[] services;
public ServiceResultSetProvider(Provider.Service[] services) {
// make defensive copy
this.services = services.clone();
}

/**
* @see
org.postgresql.pljava.ResultSetProvider#assignRowValues(java.sql.ResultSet,
int)
*/
@Override
public boolean assignRowValues(ResultSet receiver, int currentRow)
throws SQLException {
if (services == null || currentRow < 0 || currentRow >
services.length-1) {
return false;
}

receiver.updateString("provider",
services[currentRow].getProvider().getName());
receiver.updateString("service",
services[currentRow].getType());
receiver.updateString("algorithm",
services[currentRow].getAlgorithm());

return true;
}

/**
* @see org.postgresql.pljava.ResultSetProvider#close()
*/
@Override
public void close() throws SQLException {
services = null;
}
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pgfoundry.org/pipermail/pljava-dev/attachments/20111229/975a6d4b/attachment.html>

Browse pljava-dev by date

  From Date Subject
Next Message Bear Giles 2011-12-30 18:46:17 [Pljava-dev] one static method disappearing when second one is defined?
Previous Message Kris Jurka 2011-12-27 18:10:02 [Pljava-dev] testing for equality in user-defined types in select statements