原创

webservice构建中的报错问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LS7011846/article/details/82142925

1.java.net.SocketException: Permission denied

       在linux或mac系统上运行编译webservice客户端时出现权限报错问题,这是由于linux和unix对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险。报错如下:

Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: 服务器运行时错误: java.net.SocketException: Permission denied
    at com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:130)
    at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:64)
    at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:232)
    at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:126)
    at javax.xml.ws.Endpoint.publish(Endpoint.java:240)
    at com.ls.javabase.webservice.HelloService.main(HelloService.java:23)
Caused by: java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at sun.net.httpserver.ServerImpl.<init>(ServerImpl.java:100)
    at sun.net.httpserver.HttpServerImpl.<init>(HttpServerImpl.java:50)
    at sun.net.httpserver.DefaultHttpServerProvider.createHttpServer(DefaultHttpServerProvider.java:35)
    at com.sun.net.httpserver.HttpServer.create(HttpServer.java:130)
    at com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:98)
    ... 5 more

    解决方法:

               则需要将代码中的端口号限制到1024以上,即可。

               同样的,如jetty的启动端口号默认为80,但权限不允许,此时需要修改其启动端口号。

     2.用于此模式的程序包名称 'webservice/client' 不是有效的程序包名称。

       这个问题比较低级,在使用webservice构建客户端的时候,需要用到命令。

wsimport -s "src目录" -p “生成类所在包名” -keep “wsdl发布地址”。

jar:file:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/tools.jar!/com/sun/xml/internal/xsom/impl/parser/datatypes.xsd的第 37 行

Exception in thread "main" com.sun.tools.internal.ws.wscompile.AbortException
        at com.sun.tools.internal.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:129)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2283)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:183)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:126)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:429)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:190)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:168)
        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.sun.tools.internal.ws.Invoker.invoke(Invoker.java:159)
        at com.sun.tools.internal.ws.WsImport.main(WsImport.java:42)

解决方法:

       在使用时出现了如上的错误,则表明-p后面的包名写的错误,idea下的运行示例为

wsimport -s "src目录" -p “生成类所在包名” -keep “wsdl发布地址”

wsimport -s ~/IdeaProjects/self/JavaBase/src/main/java -p com.ls.javabase.webservice.client -keep http://localhost:2018/service/serviceHello\?wsdl

3.两个类具有相同的 XML 类型名称 请使用 @XmlType.name 和 @XmlType.namespace

       在运行test程序调用client的webservice方法时,出现这个错误,原因有两种:1.webservice的接口出现问题,接口名称定义出现混淆的情况,如接口名称后有“response”。2.在生成自动webservice客户端的时候路径出现错误。

解决方法:

       1.对于第一种情况需要修改xml的映射值或修改接口名称,重新生成webservice客户端。

       2.对于第二种情况需要正确填写路径,并且重新生成webservice客户端。其中在idea目录结构下的生成命令如下(linux格式命令)

wsimport -s ~/IdeaProjects/self/JavaBase/src/main/java -p com.ls.javabase.webservice.client -keep http://localhost:2018/service/serviceHello\?wsdl

windows格式命令

C:\Users\wangsj>wsimport -s E:\\workingFoilder\\projectSpace\\webservice\\src -p com.test.webservice.client -keep http://localhost:1008/service/serviceHello?wsdl

都不要忘了在最后加入wsdl。

 

正文到此结束
Loading...