Java:希望实现将WebService封装到Jar为何加载不到类?
创建工程server
IPrinter
@WebServicepublic 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