This took a bit of digging.  See the stack trace below.  You are right, jena is 
not directly calling SchemeRegistryFactory.createSystemDefault().  The problem 
is that  HttpOp.exec is calling httpClient.execute, which ends up calling 
SchemeRegistryFactory.createSystemDefault().  Evidently my class loaded already 
picked up the older version of SchemeRegistryFactory from the GWT jar and 
therefore I get the NoSuchMethodError.  So my only hope is to avoid calls to 
HttpOp.exec.


So that leads to the other thing that has been bothering me.  The default 
FileManager uses a LocatorURL and therefore tries to go out to the internet to 
resolve URLs that are in ontologies.  This problem was somewhat bad when we 
upgraded to 2.7.3 and is even worse in 2.11.0  I have been unsuccessful in 
overwriting the default FileManager with my own locationEntries before OntModel 
machinery loads URLs.   Have there been deliberate changes in this behavior and 
is there a recommended way to set up an application that needs to run behind a 
firewall without access to the internet?  The application needs to be able to 
create Ont models that use rdfs and owl.  The application also reads some RDF 
files that have prefixes that are not real URLs, like this

@prefix sct:     <http://www.mckesson.com/life/snomed-ct.ontology.owl#> .
 



Thread [main] (Suspended (exception NoSuchMethodError)) 
        owns: SystemDefaultHttpClient  (id=89)  
        owns: ConcurrentHashMap<K,V>  (id=49)   
        owns: Object  (id=50)   
        owns: ContextCache  (id=51)     
        SystemDefaultHttpClient.createClientConnectionManager() line: 118       
        SystemDefaultHttpClient(AbstractHttpClient).getConnectionManager() 
line: 445    
        SystemDefaultHttpClient(AbstractHttpClient).createHttpContext() line: 
274       
        SystemDefaultHttpClient(AbstractHttpClient).execute(HttpHost, 
HttpRequest, HttpContext) line: 797       
        SystemDefaultHttpClient(AbstractHttpClient).execute(HttpUriRequest, 
HttpContext) line: 754      
        HttpOp.exec(String, HttpUriRequest, String, HttpResponseHandler, 
HttpClient, HttpContext, HttpAuthenticator) line: 1011 
        HttpOp.execHttpGet(String, String, HttpResponseHandler, HttpClient, 
HttpContext, HttpAuthenticator) line: 291   
        HttpOp.execHttpGet(String, String) line: 326    
        LocatorURL.open(String) line: 46        
        StreamManager.openNoMapOrNull(String) line: 138 
        StreamManager.open(String) line: 99     
        RDFDataMgr.open(String, StreamManager) line: 783        
        RDFDataMgr.open(String, Context) line: 772      
        RDFDataMgr.parse(StreamRDF, String, String, Lang, Context) line: 676    
        RDFDataMgr.read(Graph, String, String, Lang, Context) line: 211 
        RDFDataMgr.read(Graph, String, Lang, Context) line: 184 
        RDFDataMgr.read(Graph, String, Lang) line: 122  
        RDFDataMgr.read(Model, String, Lang) line: 113  
        JenaReadersWriters$RDFReaderRIOT_RDFXML(RDFReaderRIOT).read(Model, 
String) line: 77     
        ModelCom.read(String) line: 229 
        AdapterFileManager.readModelWorker(Model, String, String, String) line: 
277     
        AdapterFileManager(FileManager).loadModelWorker(String, String, String) 
line: 326       
        AdapterFileManager(FileManager).loadModel(String) line: 278     
        




-----Original Message-----
From: Rob Vesse [mailto:[email protected]] 
Sent: Thursday, October 24, 2013 7:58 AM
To: [email protected]
Subject: Re: Use of recent features from httpclient

Michael

The method you identify is only used in test code, it is not called anywhere in 
the main ARQ code base (or the main code base of any other Jena library for 
that matter)

As I suggested before if you could provide a stack trace that shows the exact 
error you receive in your environment so we can see where the call to that 
method comes from and look at how to avoid it (if at all possible) that would 
be much appreciated.  Note also that you can provide a HttpClient instance to 
use via the HttpOp.setDefaultHttpClient() which may allow you to work around 
this without any need for changes on our part.

Thanks,

Rob



On 23/10/2013 18:40, "Altmann, Michael" <[email protected]>
wrote:

>In org.apache.jena.riot.web.HttpOp there is a call to 
>SchemeRegistryFactory.createSystemDefault().  This method is new in 
>HTTPClient 4.2.
>
>   public static HttpClient createCachingHttpClient() {
>
>        return new SystemDefaultHttpClient() {
>
>          /** See SystemDefaultHttpClient (4.2).  This version always 
>sets the connection cache */
>
>          @Override
>
>          protected ClientConnectionManager
>createClientConnectionManager() {
>
>              PoolingClientConnectionManager connmgr = new 
>PoolingClientConnectionManager(
>
>                      SchemeRegistryFactory.createSystemDefault());
>
>              String s = System.getProperty("http.maxConnections", 
> "5");
>
>              int max = Integer.parseInt(s);
>
>              connmgr.setDefaultMaxPerRoute(max);
>
>              connmgr.setMaxTotal(2 * max);
>
>              return connmgr;
>
>          }
>
>        } ;
>
>    } ;
>
>
>
>
>
>
>If you would be willing to replicate the code that is in httpclient 
>4.2+, rather than calling SchemeRegistryFactory.createSystemDefault(), 
>I would be much obliged.  The code in SchemeRegistryFactory is
>
>   public static SchemeRegistry More ...createSystemDefault() {
>        SchemeRegistry registry = new SchemeRegistry();
>        registry.register(
>                new Scheme("http", 80,
>PlainSocketFactory.getSocketFactory()));
>        registry.register(
>                new Scheme("https", 443, 
>SSLSocketFactory.getSystemSocketFactory()));
>        return registry;
>    }
>
>
>
>
>
>-----Original Message-----
>From: Rob Vesse [mailto:[email protected]]
>Sent: Wednesday, October 23, 2013 10:30 AM
>To: [email protected]
>Subject: Re: Use of recent features from httpclient
>
>
>
>We are always open to making the code as widely compatible as possible.
>
>Could you point out where we call the troublesome method or provide a 
>relevant stack trace from your environment?
>
>
>
>It's possible that this is something that gets called by the internals 
>of HTTP Client in which case we would likely not be able to change this.
>
>
>
>Rob
>
>
>
>On 23/10/2013 15:42, "Altmann, Michael"
><[email protected]<mailto:[email protected]>>
>
>wrote:
>
>
>
>>Sometime between version 2.7.3 and 2.11.0, jena upgraded the version 
>>of
>
>>the apache httpclient library. It now uses 4.2.3.   In particular, it
>
>>calls a method that was added in the 4.2 version of httpclient, namely
>
>>org.apache.http.impl.conn.SchemeRegistryFactory.createSystemDefault().
>
>>
>
>>While that is a completely reasonable thing to do from the Jena
>
>>development point of view, it is causing us trouble.  Our application
>
>>uses Jena and also uses GWT (Google Web Toolkit).  Even the most 
>>recent
>
>>version of GWT ( 2.5.1) comes packaged with an old, 4.0, version of 
>>the
>
>>org.apache.http.impl.conn.SchemeRegistryFactory class, which lacks the
>
>>createSystemDefault() method.    This means that we cannot use Jena
>
>>beyond version 2.7.3 until GWT Fixes its packaging (see
>
>>https://code.google.com/p/google-web-toolkit/issues/detail?id=4484).
>
>>There are several bug fixes in recent versions of Jena that I would
>
>>love to pick up, but cannot.  Is there any chance that Jena would be
>
>>willing to develop against httpclient is a way that is backwards
>
>>compatible with httpclient 4.0?
>
>>
>
>>Thanks, Michael Altmann
>
>
>
>
>
>
>
>




Reply via email to