webservice接口是什么 endpoint倒底是什么意思

1516人阅读
Endpoint: .cn/WebServices/WeatherWS.asmx&&
web服务的URI地址,你访问之后,就会出现web服务的相关类描述、方法列表以及方法描述。&
Disco: .cn/WebServices/WeatherWS.asmx?disco&&
通过这个可以找到该web服务。即利用了web服务发现机制中的一种发现机制disco。
WSDL: .cn/WebServices/WeatherWS.asmx?wsdl&
该web服务的描述性语言。即Web Services Description Language。用来描述你的web服务定义的方法和属性、binding协议部分、port端口以及服务URI。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:45904次
排名:千里之外
原创:28篇
转载:99篇
(1)(1)(1)(15)(3)(30)(2)(3)(2)(1)(1)(40)(4)(1)(4)(4)(9)(1)(1)(3)CXF&动态调用webservice的错误
String url = "
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory
&&&&&&&&&&&&&&&
.newInstance();
Client client = factory.createClient(url);
Object[] res = client.invoke("sayHi", "李晓辉");
System.out.println(res[0]);
调用的代码就这么简单,但是却始终爆出如下额错误信息:
java.lang.NullPointerException
org.piler.useJava6Compiler(Compiler.java:189)
org.pileFiles(Compiler.java:143)
org.pileFiles(Compiler.java:138)
org.apache.cxf.endpoint.pileJavaSrc(DynamicClientFactory.java:598)
org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:367)
org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:270)
org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:263)
org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:198)
at main.java.demo.hw.client.Client.main(Client.java:43)
经过查看Compiler的代码,发现useJava6Compiler方法里面有这么一句“JavaCompiler
compiler =
ToolProvider.getSystemJavaCompiler();”空指针的异常就是来自这里。产生的原因是没有获得编译环境,也就是JRE设置的问题,需要在eclipse里面把jre设置为jdk下的jre。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。leizhimin 的BLOG
用户名:leizhimin
文章数:710
评论数:2575
注册日期:
阅读量:2815
阅读量:31131
阅读量:6398
阅读量:2358
51CTO推荐博文
Java6 WebService的发布
WebService服务发布往往比较混乱,Axis2的发布形式与XFire发布方式差别很大,而Java6 Web服务的发布与Axis2、XFire的Web服务的发布方式也有着天壤之别,它们之间没有经验可以借鉴。
因此,很有必要钻研下Java6的Web服务的发布方式。
从前面两篇文章可以看出Java6对WebService的发布提供了API级别的直接支持,发布只需要一行代码就搞定了。但是作为一个服务,就需要启动,总不能每次启动都去运行一个Main方法来启动吧。
实际中Web服务的发布常常伴随着Web容器的启动而发布,而在Java6中,我们没法直接像Axis2和XFire那样直接去发布,但是可以通过变通的方法,通过Servlet来和容器绑定起来,在容器启动的时候发布服务。
下面以Tomcat为例,来实现Java6 Web服务的发布。
1、开发WebService服务
package lavasoft. import javax.jws.WebS /** * Java6开发的WebService服务端 * * @author leizhimin
10:24:13 */ @WebService public class Java6WS { &&&&&&&&/** &&&&&&&& * Web服务中的业务方法 &&&&&&&& * &&&&&&&& * @return 一个字符串 &&&&&&&& */ &&&&&&&&public String doSomething(String username) { &&&&&&&&&&&&&&&&return username + " is doing something!"; &&&&&&&&} }
2、开发发布服务的Servlet,为了通用性,最好选择GenericServlet来继承
package lavasoft. import lavasoft.server.Java6WS; import javax.servlet.*; import javax.xml.ws.E import java.io.IOE /** * 发布Java6 WebService的Servlet, * * @author leizhimin
13:52:49 */ public class WSServlet extends GenericServlet { &&&&&&&&@Override &&&&&&&&public void init(ServletConfig servletConfig) throws ServletException { &&&&&&&&&&&&&&&&super.init(servletConfig); &&&&&&&&&&&&&&&&System.out.println("准备启动WebService服务:http://192.168.14.117:8888/java6ws/Java6WS"); &&&&&&&&&&&&&&&&//发布一个WebService &&&&&&&&&&&&&&&&Endpoint.publish("http://192.168.14.117:8888/java6ws/Java6WS", new Java6WS()); &&&&&&&&&&&&&&&&System.out.println("已成功启动WebService服务:http://192.168.14.117:8888/java6ws/Java6WS"); &&&&&&&&} &&&&&&&&public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { &&&&&&&&&&&&&&&&System.out.println("此Servlet不处理任何业务逻辑,仅仅yonglai发布一个Web服务:http://192.168.14.117:8888/java6ws/Java6WS"); &&&&&&&&} }
这里将服务发布的代码写在了Servlet的init()方法中,当Servlet加载时候,会自动执行init()里面的方法。从而达到发布服务的目的,由于此Servlet不处理任何业务,因此,在Service里面仅仅写了一个提示性的语句。
3、配置web.xml
&?xml version="1.0" encoding="UTF-8"?& &web-app xmlns="/xml/ns/javaee" &&&&&&&&&&&&&&&& xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" &&&&&&&&&&&&&&&& xsi:schemaLocation="/xml/ns/javaee &&&&&&&&/xml/ns/javaee/web-app_2_5.xsd" &&&&&&&&&&&&&&&& version="2.5"& &&&&&&&&&welcome-file-list& &&&&&&&&&&&&&&&&&welcome-file&index.jsp&/welcome-file& &&&&&&&&&/welcome-file-list& &&&&&&&&&servlet& &&&&&&&&&&&&&&&&&servlet-name&WSServlet&/servlet-name& &&&&&&&&&&&&&&&&&servlet-class&lavasoft.servlet.WSServlet&/servlet-class& &&&&&&&&&&&&&&&&&load-on-startup&1&/load-on-startup& &&&&&&&&&/servlet& &&&&&&&&&servlet-mapping& &&&&&&&&&&&&&&&&&servlet-name&WSServlet&/servlet-name& &&&&&&&&&&&&&&&&&url-pattern&/servlet/WSServlet&/url-pattern& &&&&&&&&&/servlet-mapping& &/web-app&
注意,上面的Servlet比一般Servlet配置多了一行:
&load-on-startup&1&/load-on-startup&
,这样写的目的是Servlet能伴随容易的启动在第一时间加载。以便服务能尽可能早的发布,否则,只有在第一次请求该Servlet的时候,才会被加载到容器。
4、部署、启动并测试
启动Tocmat6,浏览器中输入:
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)' alt="" src="/attachment/375328.png" border="0" />
点击超链接,可以获取到WSDL如下:
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)' alt="" src="/attachment/419234.png" border="0" />
可见,服务伴随着tomcat的启动发布成功。
1)、Java6的服务发布的总体思想是通过Java6 API的调用达到发布的目的,截止目前,已经看到两种发布方式,一种是直接调用API:
Endpoint.publish("http://192.168.14.117:8888/java6ws/Java6WS", new Java6WS());
另一种是,本例中Servlet方式。
2)、Endpoint.publish是一个后台线程,一旦发布了就会一直等待处理Web服务的请求,只有当main方法退出,或者容器关闭的时候,才自动退出。
3)、其实除了这种方式,也可以整合Spring来实现服务的发布,这就和Spring的Ioc容器整合在一起了。不管什么,道理就一个,调用Endpoint.publish()方法来实现服务的发布。
4)、在发布服务的时候,应该避免使用Tomcat容器的端口,一面发生冲突,在本文中,Tomcat使用的端口是8080,而Web服务发布使用的端口是8888。本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
16:39:38 02:50:54 10:58:44 10:07:43
请输入验证码:使用CXF实现WebService,并在客户端实现动态调用 -
- ITeye技术网站
博客分类:
WebService实现
1、 整个项目使用CXF来实现,在实现的过程中,在MyEclipse中对CXF下lib中的所有jar文件通过引入外部包来处理。
2、 在MyEclipse6.5中可以实现服务器端和客户端,但是客户端在使用wsdl进行动态调用的过程中总是报错,最后使用MyEclipse9.0实现了进行动态调用的实现。其中发生的错误如下:
(1)Exception in thread "main" java.lang.LinkageError: 正在从引导类加载器加载 JAXB 2.1 API, 但此 RI (来自jar:file:/D:/CXF/lib/jaxb-impl-2.2.5.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。请使用授权目录机制将 jaxb-api.jar 放在引导类加载器中。(请参阅 /j2se/1.6.0/docs/guide/standards/)
解决办法:
通过删除引入包中的jaxb-impl-2.2.5.jar文件可以解决。
(2)java.lang.IllegalArgumentException: Can not set final com.sun.tools.internal.xjc.reader.internalizer.InternalizationLogic field com.sun.tools.internal.xjc.reader.internalizer.DOMForest.logic to org.apache.cxf.endpoint.dynamic.DynamicClientFactory$1
解决办法:
此错误最后还是没有解决,不知道如何解决。
3、 在MyEclipse9.0实现时又发生如下错误:
org.mon.i18n.UncheckedException: No operation was found with the name {/}sayHello.
4、 原因在于@WebService说明中没有使用targetNamespace造成的。
@WebService(endpointInterface="com.cxf.interfaces.IHelloWorldService",serviceName="helloWorldService")
修改如下:
@WebService(endpointInterface="com.cxf.interfaces.IHelloWorldService",serviceName="helloWorldService",targetNamespace="/")
5、 整个程序代码如下:
(1)接口的定义:
package com.cxf.
import javax.jws.WebP
import javax.jws.WebS
@WebService
public interface IHelloWorldService {
&&&
&&& String sayHello(@WebParam(name="username") String username);
&&&
}
(2)服务器端的实现:
package com.cxf.
import javax.jws.WebS
import javax.xml.ws.E
import com.cxf.interfaces.IHelloWorldS
@WebService(endpointInterface="com.cxf.interfaces.IHelloWorldService",serviceName="helloWorldService",targetNamespace="/")
public class Server implements IHelloWorldService{
&&& public String sayHello(String username) {
&&&&&&& return "Hello,"+
&&& }
&&& public static void main(String[] args) {
&&&&&&& Server impl=new Server();
&&&&&&& String address="http://127.0.0.1:9000/hello";
&&&&&&& Endpoint.publish(address, impl);
&&& }
}
(3)客户端的实现:
package com.cxf.
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientF
public class ClientFromWsdl {
&&&
&&& public static void main(String[] args) {
&&&
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
&&&
org.apache.cxf.endpoint.Client client = dcf.createClient("http://127.0.0.1:9000/hello?wsdl");
&&&&&&&&&&& //sayHello 为接口中定义的方法名称&& 张三为传递的参数&& 返回一个Object数组
&&&
Object[] objects=client.invoke("sayHello", "张三");&&&
//输出调用结果
&&&
System.out.println(objects[0].toString());
&&&
catch(Exception e)
&&&
e.printStackTrace();
&&&
}
&&& }
}
(4)客户端的实现(非动态的)
package com.cxf.
import org.apache.cxf.interceptor.LoggingInI
import org.apache.cxf.interceptor.LoggingOutI
import org.apache.cxf.jaxws.JaxWsProxyFactoryB
import com.cxf.interfaces.IHelloWorldS
public class Client {
&&& public static void main(String[] args) {
&&&&&&& JaxWsProxyFactoryBean& factoryBean=new JaxWsProxyFactoryBean();
&&&&&&& factoryBean.getInInterceptors().add(new LoggingInInterceptor());
&&&&&&& factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
&&&&&&& factoryBean.setServiceClass(IHelloWorldService.class);
&&&&&&& factoryBean.setAddress("http://localhost:9000/hello");
&&&&&&& IHelloWorldService impl=(IHelloWorldService) factoryBean.create();
&&&&&&& System.out.println(impl.sayHello("张三"));
&&& }
}
浏览 11043
浏览: 13970 次
来自: 天津
上面的 2 - (2) 我也遇到了,又是 ClassLoade ...webservice如何发布,怎么得到wsdl?
[问题点数:40分,结帖人linyfei]
webservice如何发布,怎么得到wsdl?
[问题点数:40分,结帖人linyfei]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
2012年2月 Java大版内专家分月排行榜第三2011年8月 Java大版内专家分月排行榜第三2011年6月 Java大版内专家分月排行榜第三2011年4月 Java大版内专家分月排行榜第三2010年12月 Java大版内专家分月排行榜第三
2012年2月 Java大版内专家分月排行榜第三2011年8月 Java大版内专家分月排行榜第三2011年6月 Java大版内专家分月排行榜第三2011年4月 Java大版内专家分月排行榜第三2010年12月 Java大版内专家分月排行榜第三
2012年2月 Java大版内专家分月排行榜第三2011年8月 Java大版内专家分月排行榜第三2011年6月 Java大版内专家分月排行榜第三2011年4月 Java大版内专家分月排行榜第三2010年12月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 webservice是什么 的文章

 

随机推荐