Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java 11 - Unable to make field private static final jdk.internal.misc.Unsafe jdk.internal.misc.Unsafe.theUnsafe accessible: module java.base does not "opens jdk.internal.misc" #225

Closed
vogella opened this issue May 7, 2021 · 8 comments · Fixed by #251

Comments

@vogella
Copy link

vogella commented May 7, 2021

Similar to #60 but on Java 16 creation of a webservice crashes with: Exception in thread "main" java.lang.ExceptionInInitializerError
at com.sun.xml.ws.model.WrapperBeanGenerator.createRequestWrapperBean(WrapperBeanGenerator.java:276)
at com.sun.xml.ws.model.RuntimeModeler.getRequestWrapperClass(RuntimeModeler.java:345)
at com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:771)
at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:701)
at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:461)
at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:290)
at com.sun.xml.ws.db.DatabindingImpl.(DatabindingImpl.java:70)
at com.sun.xml.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:44)
at com.sun.xml.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:28)
at com.sun.xml.ws.db.DatabindingFactoryImpl.createRuntime(DatabindingFactoryImpl.java:90)
at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:491)
at com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:270)
at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:134)
at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:578)
at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560)
at com.sun.xml.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:304)
at com.sun.xml.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:217)
at com.sun.xml.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:111)
at jakarta.xml.ws.Endpoint.publish(Endpoint.java:224)
at com.example.maven.WebServiceExample.main(WebServiceExample.java:21)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private static final jdk.internal.misc.Unsafe jdk.internal.misc.Unsafe.theUnsafe accessible: module java.base does not "opens jdk.internal.misc" to unnamed module @6bf256fa
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
at com.sun.xml.ws.model.Injector$2.run(Injector.java:71)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
at com.sun.xml.ws.model.Injector.(Injector.java:66)
... 20 more

Example:

package com.example.maven;

import jakarta.jws.WebMethod;
import jakarta.jws.WebService;
import jakarta.xml.ws.Endpoint;

@WebService
public class WebServiceExample {
	private String message = new String("Hello, ");

	public void Hello() {
	}

	@WebMethod
	public String sayHello(String name) {
		return message + name + ".";
	}

	public static void main(String[] args) {
		String url = "http://localhost:4434/miniwebservice";
		Endpoint.publish(url, new WebServiceExample());
	}
}

Maven dependency:


  <properties>
		<maven.compiler.target>11</maven.compiler.target>
		<maven.compiler.source>11</maven.compiler.source>
	</properties>
	<dependencies>
		<dependency>
			<groupId>com.sun.xml.ws</groupId>
			<artifactId>jaxws-rt</artifactId>
			<version>3.0.1</version>
		</dependency>
	</dependencies>
@vogella
Copy link
Author

vogella commented May 7, 2021

I created the example in https://github.com/vogellacompany/eclipsercp-javaws-java11/tree/maven-example simply import the Maven project "com.example.maven" and run in on Java 16. Here is my build information:

Eclipse SDK
Version: 2021-06 (4.20)
Build id: I20210503-1800
OS: Linux, v.5.4.0-72-generic, x86_64 / gtk 3.24.20, WebKit 2.30.6
Java vendor: AdoptOpenJDK
Java runtime version: 16+36
Java version: 16

@lukasj
Copy link
Member

lukasj commented May 7, 2021

JDK - as of latest JDK 17 - does not provide clean API to make the functionality required by xml ws spec working properly "on the fly". The only way to get around this at runtime is to run wsgen to generate required wrapper beans during the build. Note that this only moves the error from runtime to build time.

@lukasj
Copy link
Member

lukasj commented May 7, 2021

alternative way to get around this would be to use customizations.

Relevant part in the spec is section 3.7 which among other things says:

In the absence of customizations, the package of the bean is a generated jaxws subpackage of the SEI package. E.g. if the SEI package is com.example.stockquote then the package of the bean would be com.example.stockquote.jaxws.

(JDK currently does not provide an API to define new package in running JVM; it only allows dynamically creating classes in existing packages.)

@vogella
Copy link
Author

vogella commented May 7, 2021

Thanks @lukasj for the answer, could you point me to the documentation how to make xml ws work on Java 17? From your answer I understand that I have two alternatives but don't know how to apply them.

@lukasj
Copy link
Member

lukasj commented May 7, 2021

to create wrapper beans during the build, one can use sth like:

            <plugin>
                <groupId>com.sun.xml.ws</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>create-wrapperbeans</id>
                        <goals>
                            <goal>wsgen</goal>
                        </goals>
                        <configuration>
                            <sei>org.acme.SampleWS</sei>
                            <genWsdl>true</genWsdl>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

(plugin doc is at https://eclipse-ee4j.github.io/metro-jax-ws/jaxws-maven-plugin/wsgen-mojo.html)

@vogella
Copy link
Author

vogella commented May 7, 2021

Thanks @lukasj

Shall I leave this ticket open or close it?

@lukasj
Copy link
Member

lukasj commented May 7, 2021

keep it open for now

@alexPaulczy
Copy link

Hey folks,

we have a similar problem. We do not use maven based on the customer's specifications. We have to use the standalone version from metro (metro-standalone-3.0.1, Java 16, Eclipse 2021-03 (4.19.0) and Tomcat 10.0.6).

The container only starts when we set the SOAPBinding to RPC. Otherwise the following exception occurs.

thx for support

EXCEPTION:
public interface GreetingsService {
@WebMethod(operationName = "hello")
@WebResult(name = "helloYou")
public String hello(@WebParam(name = "username") String greeting);
}

WORKS:
@WebService()
@SOAPBinding(style = Style.RPC)
public interface GreetingsService {
@WebMethod(operationName = "hello")
@WebResult(name = "helloYou")
public String hello(@WebParam(name = "username") String greeting);
}

SEVERE: WSSERVLET11: Laufzeitdeskriptor konnte nicht geparst werden: java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
	at com.sun.xml.ws.model.WrapperBeanGenerator.createRequestWrapperBean(WrapperBeanGenerator.java:276)
	at com.sun.xml.ws.model.RuntimeModeler.getRequestWrapperClass(RuntimeModeler.java:345)
	at com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:771)
	at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:701)
	at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:461)
	at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:290)
	at com.sun.xml.ws.db.DatabindingImpl.<init>(DatabindingImpl.java:70)
	at com.sun.xml.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:44)
	at com.sun.xml.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:28)
	at com.sun.xml.ws.db.DatabindingFactoryImpl.createRuntime(DatabindingFactoryImpl.java:90)
	at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:491)
	at com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:270)
	at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:134)
	at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:578)
	at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560)
	at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:273)
	at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:149)
	at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(WSServletContextListener.java:101)
	at com.sun.xml.ws.transport.http.servlet.WSServletContainerInitializer.onStartup(WSServletContainerInitializer.java:35)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5110)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3755)
	at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:270)
	at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5499)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1353)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1357)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1357)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1335)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private static final jdk.internal.misc.Unsafe jdk.internal.misc.Unsafe.theUnsafe accessible: module java.base does not "opens jdk.internal.misc" to unnamed module @e0f2355
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
	at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
	at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
	at com.sun.xml.ws.model.Injector$2.run(Injector.java:71)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
	at com.sun.xml.ws.model.Injector.<clinit>(Injector.java:66)
	... 35 more

Juni 14, 2021 12:12:34 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error during ServletContainerInitializer processing
jakarta.servlet.ServletException: com.sun.xml.ws.transport.http.servlet.WSServletException: WSSERVLET11: Laufzeitdeskriptor konnte nicht geparst werden: java.lang.ExceptionInInitializerError
	at com.sun.xml.ws.transport.http.servlet.WSServletContainerInitializer.onStartup(WSServletContainerInitializer.java:40)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5110)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3755)
	at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:270)
	at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5499)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1353)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1357)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1357)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1335)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: com.sun.xml.ws.transport.http.servlet.WSServletException: WSSERVLET11: Laufzeitdeskriptor konnte nicht geparst werden: java.lang.ExceptionInInitializerError
	at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(WSServletContextListener.java:111)
	at com.sun.xml.ws.transport.http.servlet.WSServletContainerInitializer.onStartup(WSServletContainerInitializer.java:35)
	... 16 more
Caused by: java.lang.ExceptionInInitializerError
	at com.sun.xml.ws.model.WrapperBeanGenerator.createRequestWrapperBean(WrapperBeanGenerator.java:276)
	at com.sun.xml.ws.model.RuntimeModeler.getRequestWrapperClass(RuntimeModeler.java:345)
	at com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:771)
	at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:701)
	at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:461)
	at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:290)
	at com.sun.xml.ws.db.DatabindingImpl.<init>(DatabindingImpl.java:70)
	at com.sun.xml.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:44)
	at com.sun.xml.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:28)
	at com.sun.xml.ws.db.DatabindingFactoryImpl.createRuntime(DatabindingFactoryImpl.java:90)
	at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:491)
	at com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:270)
	at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:134)
	at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:578)
	at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560)
	at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:273)
	at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:149)
	at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(WSServletContextListener.java:101)
	... 17 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private static final jdk.internal.misc.Unsafe jdk.internal.misc.Unsafe.theUnsafe accessible: module java.base does not "opens jdk.internal.misc" to unnamed module @e0f2355
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
	at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
	at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
	at com.sun.xml.ws.model.Injector$2.run(Injector.java:71)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
	at com.sun.xml.ws.model.Injector.<clinit>(Injector.java:66)
	... 35 more





Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants