Java:希望实现将WebService封装到Jar为何加载不到类?

创建工程server
图片描述

IPrinter

@WebService

public interface IPrinter {

public String print(String str);

}

Printer

@WebService(endpointInterface = "com.server.IPrinter", serviceName = "Printer")

public class Printer implements IPrinter {

@Override

public String print(String str) {

return "Printing:" + str;

}

}

Server

public class Server {

public void open() {

try {

Endpoint.publish("http://localhost:8000/server", new Printer());

} catch (Exception e) {

e.printStackTrace();

}

}

}

将工程server打包成server.jar后,通过其他工程加载并发布WebService

public class Demo {

public static void main(String[] args) throws Exception {

URLClassLoader loader = new URLClassLoader(new URL[] { new URL("file:E:\\server.jar") });

Class<?> clz = loader.loadClass("com.server.Server");

Method method = clz.getMethod("open");

Constructor<?> constructor = clz.getConstructor();

Object instance = constructor.newInstance();

method.invoke(instance);

loader.close();

}

}

报错如下:

com.sun.xml.internal.ws.model.RuntimeModelerException: 找不到类com.server.IPrinter

at com.sun.xml.internal.ws.model.RuntimeModeler.getPortTypeName(RuntimeModeler.java:1601)

at com.sun.xml.internal.ws.model.RuntimeModeler.getPortTypeName(RuntimeModeler.java:1584)

at com.sun.xml.internal.ws.server.EndpointFactory.create(EndpointFactory.java:226)

at com.sun.xml.internal.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:144)

at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:563)

at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:545)

at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:308)

at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:231)

at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:126)

at javax.xml.ws.Endpoint.publish(Endpoint.java:240)

at com.server.Server.open(Server.java:8)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at com.server.Demo.main(Demo.java:15)

无头绪......

------------------------------------------------华丽的分割线--------------------------------------------------

将server.jar引入-Djava.ext.dirs就可以了,而用-Djava.library.path却不行,还不知道为什么

以上是 Java:希望实现将WebService封装到Jar为何加载不到类? 的全部内容, 来源链接: utcz.com/p/170566.html

回到顶部