JDK发布WebService问题

ylt520 2017-01-08 03:53:30
根据http://www.cnblogs.com/xdp-gacl/p/4259481.html 这个博客学习使用JDK发布WebService,发布的时候,程序中的("发布webservice成功!") 能够输出,控制台没有报错,但通过发布的URL无法访问。将URL改为localhost、127.0.0.1、0.0.0.0都试过也不行。使用netstat -ano 命令查看发布的端口,此端口没有被使用。
控制台的运行状态按钮在程序运行后红色一闪而过就变灰了

我将我发布的过程发上来,请帮我看看问题出在哪,谢谢!
首先,定义接口,使用@WebService注解标注接口

package me.gacl.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;

//使用@WebService注解标注WebServiceI接口
@WebService
public interface WebServiceI {

//使用@WebMethod注解标注WebServiceI接口中的方法
@WebMethod
String sayHello(String name);

@WebMethod
String save(String name,String pwd);
}

编写interface的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法。

package me.gacl.ws;

import javax.jws.WebService;

//使用@WebService注解标注WebServiceI接口的实现类WebServiceImpl
@WebService
public class WebServiceImpl implements WebServiceI {

@Override
public String sayHello(String name) {
System.out.println("WebService sayHello "+name);
return "sayHello "+name;
}

@Override
public String save(String name, String pwd) {
System.out.println("WebService save "+name+", "+pwd);
return "save Success";
}
}

使用Endpoint(终端)类发布webservice,http://172.30.24.17是我本机地址

package me.gacl.ws.test;

import javax.xml.ws.Endpoint;

import me.gacl.ws.WebServiceImpl;

//发布Web Service

public class WebServicePublish {

public static void main(String[] args) {
//定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx
String address = "http://172.30.24.17:9005/WS_Server/Webservice";
//使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用
Endpoint.publish(address , new WebServiceImpl());
System.out.println("发布webservice成功!");
}
}

然后在WebServicePublish上右键 Run As Java Application,打开浏览器访问http://172.30.24.17:9005/WS_Server/Webservice和http://172.30.24.17:9005/WS_Server/Webservice?wsdl都不成功
...全文
403 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
独孤客异乡人 2017-10-17
  • 打赏
  • 举报
回复
请问楼主这个问题有解决吗,我也遇到了这样的问题 ,我是要在web项目中通过jdk发布webservice服务,在项目的一个目录下创建了测试类 mian方法启动 情形和你的一样,启动后按钮就比变灰了,地址无法访问,jdk1.6的 框架spring struts(这些不影响吧)
ylt520 2017-01-10
  • 打赏
  • 举报
回复
引用 11 楼 shzy1988 的回复:
你是用Run As Java Application来启动服务的,main方法代码执行完了服务就关闭了啊。。。。 你将这代码放在main方法的最后面System.in.read(); 这样在代码执行完服务不会停止,只有你在控制台按动键盘才会停止服务
我新建了一个项目,把代码copy过去就可以成功。没加System.in.read();也一直在运行,按钮没有变灰 但是当我在原来的项目里面,再次执行的时候,就不成功,按钮运行后就变灰了,加了System.in.read();后没变灰,但是无效 控制台没异常输出
双子叶 2017-01-10
  • 打赏
  • 举报
回复
你是用Run As Java Application来启动服务的,main方法代码执行完了服务就关闭了啊。。。。 你将这代码放在main方法的最后面System.in.read(); 这样在代码执行完服务不会停止,只有你在控制台按动键盘才会停止服务
  • 打赏
  • 举报
回复
引用 9 楼 ylt520 的回复:
[quote=引用 8 楼 qnmdcsdn 的回复:]

@WebService(name = "HelloService", targetNamespace = "http://controller.maven.com/")
public interface IHello {
	 @RequestWrapper(localName="getName",className="com.maven.controller.getName")
	 public String getName(String name);
}

@WebService
public class Hello implements IHello{
	@Override
	public String getName(String name) {
		 System.out.println("�ӿڱ�����");
	     return "hello:" + name;
	}

}

public class TestServ {
	public static void main(String[] args) {
        IHello hello = new Hello();
         
        Endpoint.publish("http://localhost:8080/test", hello);
        System.out.println("�����ɹ�");
    }
}
之前写的一个,你试下
谢谢你,不过试了下也不行,那个按钮的红色一直是一闪而过的,没有一直在运行,会不会是这个问题,这样正常吗? [/quote] 正常,可以直接访问
ylt520 2017-01-09
  • 打赏
  • 举报
回复
引用 8 楼 qnmdcsdn 的回复:

@WebService(name = "HelloService", targetNamespace = "http://controller.maven.com/")
public interface IHello {
@RequestWrapper(localName="getName",className="com.maven.controller.getName")
public String getName(String name);
}

@WebService
public class Hello implements IHello{
@Override
public String getName(String name) {
System.out.println("�ӿڱ�����");
return "hello:" + name;
}

}

public class TestServ {
public static void main(String[] args) {
IHello hello = new Hello();

Endpoint.publish("http://localhost:8080/test", hello);
System.out.println("�����ɹ�");
}
}


之前写的一个,你试下

谢谢你,不过试了下也不行,那个按钮的红色一直是一闪而过的,没有一直在运行,会不会是这个问题,这样正常吗?

  • 打赏
  • 举报
回复

@WebService(name = "HelloService", targetNamespace = "http://controller.maven.com/")
public interface IHello {
	 @RequestWrapper(localName="getName",className="com.maven.controller.getName")
	 public String getName(String name);
}

@WebService
public class Hello implements IHello{
	@Override
	public String getName(String name) {
		 System.out.println("�ӿڱ�����");
	     return "hello:" + name;
	}

}

public class TestServ {
	public static void main(String[] args) {
        IHello hello = new Hello();
         
        Endpoint.publish("http://localhost:8080/test", hello);
        System.out.println("�����ɹ�");
    }
}
之前写的一个,你试下
ylt520 2017-01-08
  • 打赏
  • 举报
回复
楼上贴错图片了
ylt520 2017-01-08
  • 打赏
  • 举报
回复
是加到这里吧?
ylt520 2017-01-08
  • 打赏
  • 举报
回复
引用 4 楼 pany1209 的回复:
[quote=引用 2 楼 ylt520 的回复:]
[quote=引用 1 楼 pany1209 的回复:]
程序很简单,一般没问题吧,看一下jar包吧

看jar怎么看?这个应该是jdk自带的功能,我安装了jdk1.8[/quote]在实现类上加上endpointInterface="接口全限定名",刚才说错了,使用jdk发布不用jar包的,我刚才想成用cxf发布了[/quote]
尝试了一下,一样的结果
而且奇怪的是,那个服务器运行状态的按钮就直接灰掉了。我在想是不是这个原因
李德胜1995 2017-01-08
  • 打赏
  • 举报
回复
引用 2 楼 ylt520 的回复:
[quote=引用 1 楼 pany1209 的回复:] 程序很简单,一般没问题吧,看一下jar包吧
看jar怎么看?这个应该是jdk自带的功能,我安装了jdk1.8[/quote]在实现类上加上endpointInterface="接口全限定名",刚才说错了,使用jdk发布不用jar包的,我刚才想成用cxf发布了
李德胜1995 2017-01-08
  • 打赏
  • 举报
回复
引用 2 楼 ylt520 的回复:
[quote=引用 1 楼 pany1209 的回复:] 程序很简单,一般没问题吧,看一下jar包吧
看jar怎么看?这个应该是jdk自带的功能,我安装了jdk1.8[/quote]在接口上加上@SOAPBinding(style= SOAPBinding.Style.RPC)吧
ylt520 2017-01-08
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
程序很简单,一般没问题吧,看一下jar包吧
看jar怎么看?这个应该是jdk自带的功能,我安装了jdk1.8
李德胜1995 2017-01-08
  • 打赏
  • 举报
回复
程序很简单,一般没问题吧,看一下jar包吧

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧