14:39, EET
July 13, 2021
I am getting below error when trying to use prosys pubsub sdk with my application and run from some broker. while `samplepubsubsubscriberserver` runs fine when running it as standalone app.
2021-11-24 17:59:53.957 55 java.lang.IllegalArgumentException: The requested (dynamic searched) Class cannot be instantiated: class com.prosysopc.ua.pubsub.PubSubSystem$d
2021-11-24 17:59:53.961 55 at com.prosysopc.ua.pubsub.X.b(SourceFile:354)
2021-11-24 17:59:53.963 55 at com.prosysopc.ua.pubsub.PubSubSystem.start(SourceFile:651)
———————————
16:05, EET
April 3, 2012
Hi,
Which version and edition of the SDK you are using? What do you mean by “… run from some broker.”?
But in general, if the samples work, but your app does not, find the differences of your code vs. the sample.
There should be a nested exception shown in the stacktrace, can you paste it in full?
2:58, EET
July 13, 2021
Hi,
I am using ‘prosys-opc-ua-sdk-for-java-4.6.2-1636-evaluation’.
Below is the error I am getting. I am integrating pubsub component using prosys pubsub sdk in another client where some other pieces of code are running in parallel. Just wanted to know if there is any kind of limitation in such kind of usage which is restricting or causing the sdk to throw this error.
52 * Prosys OPC UA SDK for Java v4.6.2-1636
* (c) Prosys OPC Ltd.
2021-11-25 06:46:49.556 52 * Running in EVALUATION mode
* Connections will close after 120 minutes
2021-11-25 05:52:08.326 52 java.lang.IllegalArgumentException: The requested (dynamic searched) Class cannot be instantiated: class com.prosysopc.ua.pubsub.PubSubSystem$d
2021-11-25 05:52:08.327 52 at com.prosysopc.ua.pubsub.X.b(SourceFile:354)
2021-11-25 05:52:08.328 52 at com.prosysopc.ua.pubsub.PubSubSystem.start(SourceFile:651)
2021-11-25 05:52:08.329 52 at com.pubsub.impl.abc.MyPubSubSystem.run(MyPubSubSystem.java:117)
2021-11-25 05:52:08.331 52 at com.pubsub.impl.abc.MyPubSubSystem.startSubscriber(MyPubSubSystem.java:66)
2021-11-25 05:52:08.333 52 at java.lang.Thread.run(Thread.java:820)
2021-11-25 05:52:08.334 52 Caused by: java.lang.IllegalArgumentException: The requested Class is not bound: class com.prosysopc.ua.pubsub.aw
2021-11-25 05:52:08.336 52 at com.prosysopc.ua.pubsub.X.b(SourceFile:374)
2021-11-25 05:52:08.338 52 at com.prosysopc.ua.pubsub.X.a(SourceFile:524)
2021-11-25 05:52:08.339 52 at com.prosysopc.ua.pubsub.X.b(SourceFile:351)
2021-11-25 05:52:08.340 52 … 5 more
2021-11-25 05:52:08.341 52 java.lang.IllegalArgumentException: The requested (dynamic searched) Class cannot be instantiated: class com.prosysopc.ua.pubsub.PubSubSystem$d
2021-11-25 05:52:08.342 52
2021-11-25 05:52:08.344 52 Shutting down…
16:50, EET
April 3, 2012
Did you modify the SDK jar in any way for your app’s build?
Is your app run in an environment where java.util.ServiceLoader would not work? Is it possible to explain what is the environment? Also it’s java version and vendor? Also mentioning just in case it would/could be related (this is the same text as we have in the SDK DL page):
“On Java 11, SDK is only tested in the ‘classpath mode’. It hasn’t been tested in the new ‘module path’ mode and the SDK jar does not include any ‘module-info’ file and it may not work with tools that require this, such as ‘jlink’. “
The PubSub’s internal implementation requires that the jar is as-is regarding internal service files (for the) and that the java.util.ServiceLoader works (such that it seems the SDK jar from inside it). The error would seem to be that no connection factories could be resolved internally (by the SDK, via ServiceLoader) thus we would miss the entire “binding” of them thus the error.
Though we should probably improve on the error reporting in the future..
5:22, EET
July 13, 2021
– prosys SDK jar was not modified.
– standalone `SampleSubscriberServer` (It runs fine) and the new Application where I am using the prosys SDK uses the same jdk 1.8.
– pubSubSystem.start(); is throwing this error.
– yes the issue you mention is correct (The error would seem to be that no connection factories could be resolved internally (by the SDK, via ServiceLoader) thus we would miss the entire “binding” of them thus the error.)
can you suggest alternate way of initializing/instantiating pubSubSystem or any changes we can do here to get rid of this error.
—-
try {
pubSubSystem = samplePubSubConfiguration.createPubSubSystem(server, PubSubMode.SUBSCRIBER,
/* variableId */ SamplePubSubConfiguration.SAMPLE_MY_LEVEL_NODE_ID,
/* eventNotifierId */ SamplePubSubConfiguration.SAMPLE_MY_ALARM_NODE_ID,
/* targetVariableId */ SamplePubSubConfiguration.SAMPLE_TARGET_VARIABLE_ID);
// Add the listeners that react to data changes and events
addPubSubEventListeners();
// Starts the PubSubSystem. Note that it must be shutdown separately at the end, as well.
pubSubSystem.start();
startSimulation();
printConnectionAddresses();
mainMenu();
} catch (Exception e) {
printException(e);
}
—–
11:06, EET
April 3, 2012
No ideas for more guesses at least now.. so in short find differences to the sample and fix them (or let us know, maybe it is something we could fix). But in general the design relies on the ServiceLoader to work properly (as it should in normal java environments), so there is like no alternative way to make it work than that.
You can try to put logging on ‘com.prosysopc.ua.pubsub’ on DEBUG, but due to the problem I would not expect it to help much. It should show these normally:
11/26/2021 10:56:37.686 DEBUG [main] com.prosysopc.ua.pubsub.PubSubSystem – Resolving pubsub support modules..
11/26/2021 10:56:37.687 DEBUG [main] com.prosysopc.ua.pubsub.PubSubSystem – Found: [com.prosysopc.ua.pubsub.InternalPubSubUdpSupport$2@3e598df9]
11/26/2021 10:56:37.688 DEBUG [main] com.prosysopc.ua.pubsub.PubSubSystem – Found: [com.prosysopc.ua.pubsub.InternalPubSubUadpSupport$1@32fdec40]
11/26/2021 10:56:37.688 DEBUG [main] com.prosysopc.ua.pubsub.PubSubSystem – Found: [com.prosysopc.ua.pubsub.InternalPubSubMqttSupport$1@29d37757, com.prosysopc.ua.pubsub.U@4fcc529]
11/26/2021 10:56:37.689 DEBUG [main] com.prosysopc.ua.pubsub.PubSubSystem – Found: [com.prosysopc.ua.pubsub.InternalPubSubJsonSupport$1@5d28bcd5]
but I assume in your case due to the problem there is 0 of those Found […] lines.
By ‘standalone `SampleSubscriberServer`’ I assume running from the .bat/.sh scripts. Can you just try to make the sample run in your IDE?
12:05, EET
July 13, 2021
On IDE it runs without exception, issue comes when it runs from broker where other pieces of code are running together. Let me debug more around ServiceLoader section when the code gets deployed in my broker and let you know.
It will be helpful if you can comment on the the mandatory list of jars/libraries required when the start method is invoked on PubSubSystem.
12:55, EET
July 13, 2021
14:27, EET
April 3, 2012
What do you mean by ‘broker’?
Have you read the documentation and the README.txt?
This is explained in the ‘DEPLOYMENT’ section of the README.txt, though seems the mqtt lib part is missing from that.
In short, from the lib folder:
– prosys-opc-ua-sdk-*.jar is the SDK jar and obiviously always needed
– Everything from lib-mandatory is needed
– Everything from lib-opc-https is needed if you enable opc.https endpoints
– Everything from lib-pubsub-mqtt is needed if you want MQTT-UADP or MQTT-JSON connections in PubSub
– Things from lib-samples are only used in the samples and might be needed if your app contains code copied from the samples
– Things from lib-pubsub-samples are only used in pubsub specific samples and might be needed if your app contains code copied from the pubsub samples
Please read everything from the ‘tutorial’ folder and see e.g. the SampleConsoleServer+SampleConsoleClient regarding the certificates etc. stuff.
12:25, EET
July 13, 2021
I found this comment in initApplicationIdentity – “Due to SDK design, we must have a certificate in order to have any endpoints”. this is set as client’s application identity.
What are the various options sdk provides for configuring client’s identity. (I assume loading of certificates are mandatory part of identifying client/application and can not be skipped.)
13:27, EET
July 13, 2021
If I provide absolute path here, File privateKeyPath = new File(“C:\\prosyssdkcert\\PKI\\CA\\private”); // (initApplicationIdentity method)
it gives me Failed to create session channel to server
Bad_Timeout (code=0x800A0000, description=”The operation timed out.”)
at com.prosysopc.ua.stack.transport.impl.AsyncResultImpl.waitForResult(SourceFile:287)
what is the correct way of specifying path to self signed certificates.
14:00, EET
April 3, 2012
Read the tutorials. The are in the ‘tutorial’ folder of the SDK zip you downloaded. Plus check the samples, sampleconsoleclient+sampleconsoleserver and then check the pubsub ones.
If not enough, read at least:
https://reference.opcfoundation.org/Core/docs/Part1/
https://reference.opcfoundation.org/Core/docs/Part2/
6:03, EET
September 14, 2021
Hi Bjarne,
We are using a custom class loader, and as you have rightly mentioned in this comment – https://forum.prosysopc.com/forum/opc-ua-java-sdk/getting-class-cannot-be-intantiated-error/#p5766 … with custom class loader following statements are not logged in our case –
DEBUG com.prosysopc.ua.pubsub.PubSubSystem – Found: [com.prosysopc.ua.pubsub.InternalPubSubUdpSupport$2@98bd1627]
DEBUG com.prosysopc.ua.pubsub.PubSubSystem – Found: [com.prosysopc.ua.pubsub.InternalPubSubUadpSupport$1@c595f821]
DEBUG com.prosysopc.ua.pubsub.PubSubSystem – Found: [com.prosysopc.ua.pubsub.InternalPubSubMqttSupport$1@dbefa96, com.prosysopc.ua.pubsub.aa@2ac584ed]
DEBUG com.prosysopc.ua.pubsub.PubSubSystem – Found: [com.prosysopc.ua.pubsub.InternalPubSubJsonSupport$1@6c1c6131]
What is it that is so different for these classes – com.prosysopc.ua.pubsub.InternalPubSubUdpSupport, InternalPubSubUadpSupport, InternalPubSubMqttSupport, InternalPubSubJsonSupport .. that it fails at this point? If you can give us some pointers, it would help us to debug further.
11:58, EET
April 3, 2012
Each of those classes extends the package-private internal com.prosysopc.ua.pubsub.AbstractPubSubSupport. PubSubSystem internally loads subtypes of that via java.util.ServiceLoader.load(AbstractPubSubSupport.class). Note that the classes are only public because the ServiceLoader needs them to be.
The java.util.ServiceLoader works by checking the jar’s META-INT/services/com.prosysopc.ua.pubsub.AbstractPubSubSupport file for the implementations, which are
com.prosysopc.ua.pubsub.InternalPubSubUdpSupport
com.prosysopc.ua.pubsub.InternalPubSubUadpSupport
com.prosysopc.ua.pubsub.InternalPubSubMqttSupport
com.prosysopc.ua.pubsub.InternalPubSubJsonSupport
If you have modified the SDK jar via shading or obfuscating, please ensure the file has the updated class names or exclude them from obfuscation.
Each of those can contribute to the internals of PubSubSystem. In the case of the MQTT, as it is optional, it would not contribute anything if the Eclipse Paho cannot be found on the classpath.
The javadocs of ServiceLoader.load(Class),
https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html#load-java.lang.Class-
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.html#load(java.lang.Class)
do state “Creates a new service loader for the given service type, using the current thread’s context class loader. ”
So maybe that helps..
We might need to revisit this in the future.
Most Users Ever Online: 1919
Currently Online:
20 Guest(s)
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Heikki Tahvanainen: 402
hbrackel: 144
rocket science: 88
pramanj: 86
Francesco Zambon: 83
Ibrahim: 78
Sabari: 62
kapsl: 57
gjevremovic: 49
Xavier: 43
Member Stats:
Guest Posters: 0
Members: 735
Moderators: 7
Admins: 1
Forum Stats:
Groups: 3
Forums: 15
Topics: 1523
Posts: 6449
Newest Members:
rust, christamcdowall, redaahern07571, nigelbdhmp, travistimmons, AnnelCib, dalenegettinger, howardkennerley, Thomassnism, biancacraft16Moderators: Jouni Aro: 1026, Pyry: 1, Petri: 0, Bjarne Boström: 1026, Jimmy Ni: 26, Matti Siponen: 346, Lusetti: 0
Administrators: admin: 1