网上有很多文章都说eclipse要安装额外的插件才能支持weblogic,可能以前需要这样,但自从bea的weblogic被oracle收购后,现在已经很简单了 一、先下载 Free Oracle WebLogic Server 12c (12.1.1) Zip Distribution and Installers for Developers
http://www.oracle.com/technetwork/middleware/fusion-middleware/downloads/index.html
这个安装以后,就已经自带了Eclipse(而且已经集成了weblogic插件),安装完成后,可以通过 “开始菜单->所有程序->Oracle Enterprise Pack for Eclipse->Oracle Enterprise Pack for Eclipse” 启动 二、64位机器上,Eclipse启用失败的问题
出错时,提示信息如下:
Java was started but returned exit code=1
...
网上找了很多文章,都说是修改eclipse.ini配置或重新安装32位JVM,但我试了貌似都无效,最后发现还是得在环境变量里修改:
2.1 添加系统环境变量JAVA_HOME,其值为 c:\bea\jdk160_29\ (此处修改为自己机器上的jdk实际物理目录)
2.2 PATH环境变量最后添加 ;%JAVA_HOME%\bin\
2.3 添加系统环境变量 CLASSPATH,其值为 .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
检测这些变量是否正确的最简单办法:在命令行cmd窗口里,输入javac -version,要是能出java版本号就说明ok 三、在Eclipse里设置Weblogic Server
找到Servers面板,点击"New Server wizard"
选择 对应的weblogic版本
指定weblogic的domain目录
如果你已经创建了dynamic web project,还可以把指定的项目应用到该weblogic服务器
6.3.3、创建weblogic web service
创建一个WebLogic Web Service Project 命名为myWebService
6.3.3.1、创建用于传输的实体类PersonEntity
package model;
import java.util.*;
public class PersonEntity {
private String _name;
private int _age;
private Date _birthday;
private float _salary;
/**
* @return the _name
*/
public String getName() {
return _name;
}
/**
* @param _name the _name to set
*/
public void setName(String _name) {
this._name = _name;
}
/**
* @return the _age
*/
public int getAge() {
return _age;
}
/**
* @param _age the _age to set
*/
public void setAge(int _age) {
this._age = _age;
}
/**
* @return the _birthday
*/
public Date getBirthday() {
return _birthday;
}
/**
* @param _birthday the _birthday to set
*/
public void setBirthday(Date _birthday) {
this._birthday = _birthday;
}
/**
* @return the _salary
*/
public float getSalary() {
return _salary;
}
/**
* @param _salary the _salary to set
*/
public void setSalary(float _salary) {
this._salary = _salary;
}
}
6.3.3.2、创建web service“接口契约”及“实现”
接口定义
package contract;
import javax.jws.WebMethod;
import javax.jws.WebService;
import model.*;
@WebService(name = "Person", targetNamespace = "http://jmyang.com/")
public interface Person {
@WebMethod(operationName = "getPersonByName")
public PersonEntity getPersonByName(String name);
}
接口实现
package contract;
import javax.jws.*;
import model.*;
@WebService(portName = "PersonPort", serviceName = "PersonService", targetNamespace = "http://jmyang.com/", endpointInterface = "contract.Person")
public class PersonImpl implements Person {
public PersonEntity getPersonByName(String name) {
PersonEntity p = new PersonEntity();
p.setName(name);
if (name.equals("jmyang")){
p.setAge(30);
p.setSalary(1000);
}
else if(name.equals("zhangsan")){
p.setAge(20);
p.setSalary(1500);
}
else{
p.setAge(25);
p.setSalary(1200);
}
return p;
}
}
6.3.3.3、部署 及 WSDL测试
6.3.3、eclipse 环境中调用weblogic web service
6.3.3.1、创建客户端调jar包
File->New 创建一个Weblogic Web Service Client
WSDL选择Remote,并输入WSDL的远程地址
指定生成客户端jar的路径(其实用默认的就行了)
指定“运行时从远程获取wsdl”
完成后,eclipse就会生成一个jar包
6.3.3.2、利用客户端jar包,调用web service
随便创建一个java project,命名为wsCallDemo,在project属性时,把刚才生成的jar包添加进来
在eclipse里,双击PersonService.jar包,可以看到里面有很多自动生成的类
写几行代码测试一下:
package test;
import com.jmyang.*;
public class CallWsSample {
/**
* @param args
*/
public static void main(String[] args) {
PersonService service = new PersonService();
Person serviceInterface = service.getPort(Person.class);//取得服务接口
PersonEntity jimmy= serviceInterface.getPersonByName("jmyang");//调用服务
System.out.println(jimmy.getName() + "/" + jimmy.getAge() + "/" + jimmy.getSalary());//输出结果
PersonEntity zhangsan= serviceInterface.getPersonByName("zhangsan");//调用服务
System.out.println(zhangsan.getName() + "/" + zhangsan.getAge() + "/" + zhangsan.getSalary());//输出结果、
}
}
注:以上方法,对于调用.net wcf服务同样适用。需要特别注意的是:对于String类型的比较,在java web service中,一定要用 equals来判断二个字符串(内容)是否相等,如果用==号,永远返回false,但是在常规java project中,==号与equals结果却相同(初次接触java web service,暂时尚未完全参透,看了一些相关的文章,==号是判断二个字符串是否引用相同,而equals是判断二个字符串是否内容相同,在常规java project中测试时,String未被序列化传输,jvm内部二个字符串的引用、内容都是相同的,但在web service中使用时,字符串会被序列化传输,反序列化时,相当于创建了一个全新的字符串实例对象,导致引用不同)