JAX Webservice无法在CodenameOne项目中工作

时间:2017-05-09 18:40:05

标签: java web-services codenameone

我创建了一个运行良好的简单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项目时到底有什么不同?它确实与代码无关,因为这显然有效。 感谢任何提示。

谢谢和最好的问候

1 个答案:

答案 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。这更快(通信更有效)并且代码尺寸更小。