Cannot instantiate java.net.URLEncoder
Wednesday, 30 July 2014 · 4 messages
MG
Marc van Grootel30 Jul 2014 18:17 #
Hi,
What could be the reason that importing java.net.URLDecoder works as expected but doing the same with java.net.URLEncoder doesn't.
The following works:
import module namespace decoder = "java.net.URLDecoder";
decoder:decode('foo/bar%20baz') => 'foo/bar baz'
This gives a "Could not instantiate module 'java.net.URLEncoder'
import module namespace encoder = "java.net.URLEncoder";
encoder:encode('foo/bar baz')--Marc
DK
Dirk Kirsten30 Jul 2014 18:25 #
Hello Marc,
URLEncoder has no public constructor, URLDecoder has. Using import to bind to Java, BaseX tries to create a new instance, which is not possible without a constructor. Use declare, i.e.
declare namespace encoder = "java:java.net.URLEncoder";to access static methods.
Cheers,
Dirk
Quoted text · Marc van Grootel · 20 lines
On 30/07/14 18:17, Marc van Grootel wrote: > Hi, > > What could be the reason that importing java.net.URLDecoder works as > expected but doing the same with java.net.URLEncoder doesn't. > > The following works: > > import module namespace decoder = "java.net.URLDecoder"; > decoder:decode('foo/bar%20baz') > > => 'foo/bar baz' > > This gives a "Could not instantiate module 'java.net.URLEncoder' > > import module namespace encoder = "java.net.URLEncoder"; > encoder:encode('foo/bar baz') > > --Marc >
--
Dirk Kirsten, BaseX GmbH, http://basex.org
|-- Firmensitz: Blarerstrasse 56, 78462 Konstanz
|-- Registergericht Freiburg, HRB: 708285, Geschäftsführer:
| Dr. Christian Grün, Dr. Alexander Holupirek, Michael Seiferle `-- Phone: 0049 7531 28 28 676, Fax: 0049 7531 20 05 22
MG
Marc van Grootel30 Jul 2014 18:36 #
Hi Dirk,
Great. What a weird asymmetry though. At least there's a way to call it.
Thanks.
--Marc
Quoted text · Dirk Kirsten · 42 lines
On Wed, Jul 30, 2014 at 6:25 PM, Dirk Kirsten <dk at basex.org> wrote: > Hello Marc, > > URLEncoder has no public constructor, URLDecoder has. Using import to > bind to Java, BaseX tries to create a new instance, which is not > possible without a constructor. Use declare, i.e. > > declare namespace encoder = "java:java.net.URLEncoder"; > > to access static methods. > > Cheers, > Dirk > > On 30/07/14 18:17, Marc van Grootel wrote: > > Hi, > > > > What could be the reason that importing java.net.URLDecoder works as > > expected but doing the same with java.net.URLEncoder doesn't. > > > > The following works: > > > > import module namespace decoder = "java.net.URLDecoder"; > > decoder:decode('foo/bar%20baz') > > > > => 'foo/bar baz' > > > > This gives a "Could not instantiate module 'java.net.URLEncoder' > > > > import module namespace encoder = "java.net.URLEncoder"; > > encoder:encode('foo/bar baz') > > > > --Marc > > > > -- > Dirk Kirsten, BaseX GmbH, http://basex.org > |-- Firmensitz: Blarerstrasse 56, 78462 Konstanz > |-- Registergericht Freiburg, HRB: 708285, Geschäftsführer: > | Dr. Christian Grün, Dr. Alexander Holupirek, Michael Seiferle > `-- Phone: 0049 7531 28 28 676, Fax: 0049 7531 20 05 22 >
--
--Marc
DK
Dirk Kirsten30 Jul 2014 19:18 #
We are not responsible for weird Java design decisions ;-)
Quoted text · Marc van Grootel · 55 lines
On 30/07/14 18:36, Marc van Grootel wrote: > Hi Dirk, > > Great. What a weird asymmetry though. At least there's a way to call it. > Thanks. > > --Marc > > > On Wed, Jul 30, 2014 at 6:25 PM, Dirk Kirsten <dk at basex.org> wrote: > >> Hello Marc, >> >> URLEncoder has no public constructor, URLDecoder has. Using import to >> bind to Java, BaseX tries to create a new instance, which is not >> possible without a constructor. Use declare, i.e. >> >> declare namespace encoder = "java:java.net.URLEncoder"; >> >> to access static methods. >> >> Cheers, >> Dirk >> >> On 30/07/14 18:17, Marc van Grootel wrote: >>> Hi, >>> >>> What could be the reason that importing java.net.URLDecoder works as >>> expected but doing the same with java.net.URLEncoder doesn't. >>> >>> The following works: >>> >>> import module namespace decoder = "java.net.URLDecoder"; >>> decoder:decode('foo/bar%20baz') >>> >>> => 'foo/bar baz' >>> >>> This gives a "Could not instantiate module 'java.net.URLEncoder' >>> >>> import module namespace encoder = "java.net.URLEncoder"; >>> encoder:encode('foo/bar baz') >>> >>> --Marc >>> >> >> -- >> Dirk Kirsten, BaseX GmbH, http://basex.org >> |-- Firmensitz: Blarerstrasse 56, 78462 Konstanz >> |-- Registergericht Freiburg, HRB: 708285, Geschäftsführer: >> | Dr. Christian Grün, Dr. Alexander Holupirek, Michael Seiferle >> `-- Phone: 0049 7531 28 28 676, Fax: 0049 7531 20 05 22 >> > > >
--
Dirk Kirsten, BaseX GmbH, http://basex.org
|-- Firmensitz: Blarerstrasse 56, 78462 Konstanz
|-- Registergericht Freiburg, HRB: 708285, Geschäftsführer:
| Dr. Christian Grün, Dr. Alexander Holupirek, Michael Seiferle `-- Phone: 0049 7531 28 28 676, Fax: 0049 7531 20 05 22
Written for BaseX 7.9. BaseX may have changed since: please check the current documentation.
⚡Generated with XQuery