我创建了一个运行良好的简单Web服务: 接口:
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloService {
@WebMethod
void sayHello();
}
已实施服务:
@WebService(endpointInterface = "mypackage.HelloService")
public class HelloServiceImpl implements HelloService {
@Override
public void sayHello() {
System.out.println("Hello world");
}
出版商:
public class HelloServicePublisher {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8080/hello", new HelloServiceImpl ());
}
}
当我创建一个普通的JAVA项目时,使用以下客户端代码,它完美地运行:
public class Client {
public static void main(String[] args) throws Exception {
URL url = new URL("http://localhost:8080/hello?wsdl");
// 1st argument service URI, refer to wsdl document above
// 2nd argument is service name, refer to wsdl document above
QName qname = new QName("http://server/", "HelloServiceImplService");
Service service = Service.create(url, qname);
HelloService server = service.getPort(HelloService.class);
server.sayHello();
}
}
这编译并运行正常。当我将VERY SAME客户端代码复制到一个普通的新CN1项目时,我在service.getPort()调用时得到一个零点异常:
at com.sun.xml.internal.ws.model.RuntimeModeler.getPortTypeName(Unknown Source)
at com.sun.xml.internal.ws.model.RuntimeModeler.getPortTypeName(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source)
at javax.xml.ws.Service.getPort(Unknown Source)
所以问题是:与普通的Java项目相比,创建CN1项目时到底有什么不同?它确实与代码无关,因为这显然有效。 感谢任何提示。
谢谢和最好的问候
答案 0 :(得分:1)
Codename One doesn't support the full Java API也不支持JAX。您只能安装Codename One支持的库,并且只能使用javadocs中提到的JDK子集。
上面解释了其原因,但总的来说,它是可行性/规模的问题。即使我们删除了所有未使用的内容,完整的JVM也将超过50mb,接近100mb,相比之下,Codename One接近于5mb以下的本机OS应用程序的效率/大小。
在networking section of the developer guide中,我们讨论了几种网络方法,包括webservice向导,它生成一个可以从客户端与之通信的servlet。这更快(通信更有效)并且代码尺寸更小。