【日常】关于Eclipse开发基于cxf的web services的基本步骤

好久之前玩过的东西,昨天应一个哥们要去,给他做一个服务,只好想了又想,因为自己对java一知半解,只停留在照猫画虎的层次,不过运气还好,加上以前碰到过很多挫折,所以配的还算顺利。在csdn进行记录,以免忘记。

顺序:

 

一 准备

1 Eclipse3.4

2 JDK1.5

3 Tomcat 6

4 tomcat plugin v3.2.1

5 cxf开发包 2.2.5

 

二 配置环境

1 安装jdk

2 copy eclipse && tomcat6 && cxf 到自己想放它们的地方(eclispe不需要安装,tomcat从6开始也不需要install)

3 配置环境变量如下: 
  参考

  set CXF_HOME=C:/cxf2.1
  set JAVA_HOME=C:/Java/jdk1.5.0_09

  set PATH=%JAVA_HOME%/bin;%CXF_HOME%/bin;%PATH%
  set CLASSPATH=.;%CXF_HOME%/lib/cxf-manifest.jar;./build/classes

4. 解压缩tomcat plugin v3.2.1到Eclipse的plugin目录下

 

三 开发过程

关于开发过程,Apache和IBM官方有很详细的文档,

eg:http://www.ibm.com/developerworks/cn/webservices/ws-pojo-springcxf/

我这里只针对过程中可能遇到的一个问题进行总结。(之后会附上可行的源代码)

1 Eclispe下new个新的普通java工程就可以,但是myeclipse下好像只能在建立在web项目中

2 暴露服务有两种方式jaxws:Endpoint和jaxws:Server两种方式,网上有很详细的解释它们的区分,你可以任选一种

3 有的时候,eclipse会提示找不到Endpoint的说明,没有问题,go on

4 你要部署一个项目到tomcat, 要写一个xml到tomcat目录去:

    参考:

   <?xml version="1.0" encoding="UTF-8"?>
    <Context docBase="E:/自己-CODE/JavaCode/Eclipse34_workspace/你的项目名称,一定要正确,大小写匹配"/>

    建议:目录最好用英文,否则有时候用不同编辑的时候,会出现二进制无法读取现象,比如上面的“自己”用记事本程序写入后,

             Eclipse在执行时有时会出错的,如果你用Eclipse打开会发现这个记事本打开能看的“自己”由于编码问题可能在eclipse中不能

             正常显示,需要修改。
5 接口和类加@WebService后会暴露接口,你也可以选择性暴露。

6 附上一个可行的代码参考:

【1】类接口(函数名字随便起的,和参数没有任何关系)


package ws.cxf;

import javax.jws.WebService;


@WebService
public interface IAuthenService
{
 public String  ClientService(String footname,int num);
 }

 

【2】类

 /**
 *
 */
package ws.cxf;

import javax.jws.WebService;

import ws.cxf.IAuthenService;

@WebService
public class AuthenService implements IAuthenService

 private String myfootname="potatoAndTomato";
 private int eatnum=1000;
 
 public  static void main(String[] args)
 {
  System.out.println("Hello,world!Jo 1");
 }

 public String ClientService(String footname, int num)
 {  
  String result="";
  if(this.myfootname.equals(footname))
  {
   result="你不能再吃这个了,buddy!";
  }
  else
  {
   result="你还能吃呀,强!";
   if(num<this.eatnum)
   {
    result+=" 可惜,你要的已经没有了!";     
   }
   else
   {
    result+="稍等等,一会就给你!";
   }   
  }
  return result;
 }
 
  public String getMyfootname() {
  return myfootname;
 }

 public void setMyfootname(String myfootname) {
  this.myfootname = myfootname;
 }

 public int getEatnum() {
  return eatnum;
 }

 public void setEatnum(int eatnum) {
  this.eatnum = eatnum;
 }

}

 

  【3】配置暴露服务xml

<beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
            xmlns:jaxws="
http://cxf.apache.org/jaxws"
            xsi:schemaLocation="
http://www.springframework.org/schema/beans
                                http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                                http://cxf.apache.org/jaxws
                                http://cxf.apache.org/schemas/jaxws.xsd">
<!-- Import Apache CXF Bean Definition -->
           <import resource="classpath:META-INF/cxf/cxf.xml"/>
           <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
           <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

<!-- EatService -->
           <bean id="myService2" class="ws.cxf.AuthenService">
               <property name="myfootname" value="qiao"/>
               <property name="eatnum" value="10"/>
           </bean>   
            
          <!-- Expose EatWebService  -->      
           <jaxws:endpoint id="eatWebService2" serviceName="AuthenSrv" address="/AccessControlDomain/Access">
               <jaxws:implementor ref="myService2"/>                  
           </jaxws:endpoint>    

</beans>        

 

【4】项目配置文件xml:放置在WEB-INF下

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="
http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <description>在tomcat manager中显示的描述</description>
 <display-name>在tomccat manager中显示的名字 </display-name>
 <!-- Spring Config Location -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:/BeanRefServer.xml</param-value>
 </context-param>
 <!-- Spring ContextLoaderListener -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <!-- Apache CXFServlet -->
 <servlet>
  <servlet-name>CXFServlet</servlet-name>
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <!-- CXFServlet Mapping -->
 <servlet-mapping>
  <servlet-name>CXFServlet</servlet-name>
  <url-pattern>/*</url-pattern>
 </servlet-mapping>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
</web-app>

 

 

7 运行tomcat:如果提示端口被占,可以看看自己电脑上有没有安装oracle,它会自动安装apache服务,会占用8080端口,你需要修改其中一个端口,到对应的配置文件中替换8080为一个不常使用的端口即可,如8088。

 

8 在浏览器下看访问:127.0.0.1:8080 是会显示tomcat主页的,点击tomcat manager,如果你配置好tomcat的用户,

在tomcat 6下,用户配置信息放在其目录下的tomcat-user.xml中,默认是注释掉的,你需要去掉注释符,然后添加一个角色manager

如下面的用户tomcat.

<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat,manager"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>

之后,你进入tomcat manager后,就可看见自己部署的项目,点击即可访问其。

 

9 oracle的osb可以进行类似于微软web服务的那种基于浏览器的测试,如果你需要可以试试,还是很方便的。

 

以上说明就到此位置,感觉以前遇到了很多小问题,但是一时也想不起来了,先这样吧。

 

附录:关于微软的服务开发和uddi部署,可以参考一个我写在电脑编程与技巧的文章。

里面关于UDDI的部署的一些发现,可能在网上很难找到。

http://www.cqvip.com/qk/98258X/201005/33119616.html

 

说明:我以前看的一个关于cxf开发的很详细的文章在我的资源中,1分。

 

附录:

【1】 tomcat manager 查看

 

 


 

【2】 发布界面:

 

That‘s all.

Good luck 2 u.
                                                       

   

 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页