第一篇:java之webservice_aegis.xml学习
*.aegis.xml学习
public interface UserInfo {
public User findUserInfosByUserID(String userUniqueID);
public String test();
public Collection findRoleInfosByUserID(String userUniqueID);
}
观察此接口,受限我们看findRoleInfosByUserID方法,此方法传入String,返回类型为Collection,此时,我们即需要配置findRoleInfosByUserID方法。
配置步骤,在接口类的同一包下建立和接口名相同的aegis.xml文件,即UserInfo.aegis.xml文件。
UserInfo.aegis.xml
Java代码
其中,method代表需要配置的方法名,由于XFire可以支持基本类型,针对集合类型时,需要配置,返回类型或参数类型为基本类型时不需要特殊配置。
此时,findRoleInfosByUserID方法配置完毕
PS,还拿此接口举例,如接口中,findRoleInfosByUserID接受的参数也为集合类型,那么需要在
Java代码
index=“0”代表方法的参数的序号,0即第一个参数。
componentType代表集合参数内包含的类型,也可以为自定义对象,例如User
注意,如果findRoleInfosByUserID方法有两个参数,一个比如为String,一个为集合,那么只需要配置集合参数即可。
二。映射POJO
比如还是上面的UserInfo接口,第一个方法
public User findUserInfosByUserID(String userUniqueID);
此时,返回类型为User
如果User中仅为基本类型,例如String,int等基本类型,无需配置User
但如果User中还包含有其他类型,比如包含有Set,List,那么需要对其进行配置
比如User代码如下:
Java代码
public class User implements java.io.Serializable {
private Integer userId;
private String loginName;
private String userPassword;
private Integer SOrder;
private String userCa;
private String userName;
private String userTel;
private String userEmail;
private String ZNote;
private String userCode;
private DicSystemAuth SDicSystemAuth;private
Set SGroupUsers = new HashSet(0);private Set
SUserDepts = new HashSet(0);
}
此时User中还包含有SDicSystemAuth的对象,以及SUserDepts等Set集合这种情况主要可能会出现在使用Hibernate,映射一对一,一对多表时
这里要特别注意
那么此时我们需要对User进行aegis绑定,控制POJO和XML的映射
配置方法:
在User对象所在包内建立User.aegis.xml
由于User中包含Set,那么只需要对集合做设置即可,DicSystemAuth下面单独讨论
我们可以分两次来配置,分别讲解
1,Java代码
此时,配置文件中配置了两个Set集合,componentType明确定义了Set集合内包含的内容
此时,DicSystemAuth即便是自定义的对象类,由于不是集合,XFire也可以对其正确映射。
Java代码
第二种方式,定义了三个字段,并使用了ignore属性,表示这三个属性不能被序列化。
那么,何时会遇到类似于User中Set集合,不被序列化呢?
当客户端访问本地代理时,如果User表内包含有其他表的关联时,如果基于hibernate的持久层,由于hibernate的惰性加载机制,加载User时仅会将User中的属性值加载而不会加载关联表中的值,比如set和SDicSystemAuth对象等,当客户端访问本地代理,序列化User对象时,如果没有设置关联字段是否序列化,那么它会将其全部序列化,但当序列化时,由于hibernate的惰性加载,此时Session已经关闭,那么在序列化关联字段的时候,就会出现session was close的异常。因此解决办法是在aegis绑定时制定关联字段的ignore属性设置为true。
还有一种解决办法,就是仍然按照第一种配置方式,明确指明关联的Set集合内的对象,但在执行序列化前,session关闭之前,提前将关联字段内的值初始化。
用Hibernate.initialize初始化
最后补充一小句
XFire对于自定义的对象可以聪明的找到,前提是它不包含集合例如你的方法返回一个User对象
User中都是基本类型,或者User中包含有Dept对象的引用,都没有问题。
但如果你不希望加载user时序列化Dept出问题,就乖乖把dept初始化或将dept的ignore属性设置为true
本篇文章没什么头绪,想哪儿写哪儿,主要是对这段时间的xfire的基本的学习的一个小结,所以没有太注重词语搭配,以看懂为主。。有时间再来整理整理
注意问题:
当遇到需要映射POJO或配置WebService接口方法返回类型(如集合类型,自定义对象类型)时,需要进行绑定,此时aegis的绑定为建立 xxxx.aegis.xml的文件(xxxx为对应的实
体名,如User.aegis.xml)。对于正常的String,int类型的数据,无需做特别说明就能映射。对于Collection类型,需要如下配置:(例如User对象里包含一个roleList属性)
这是如果你的Role对象里都是基本数据类型,则可以不写Role.aegis.xml,但如果Role对象里也有其他类型的对象,则同样需 要配置Role.aegis.xml。
当然如果你不想映射roleList,可以这么配置(所以无需映射的属性都可以这样配置):
注意:对于一些非标准的写法需要做特殊处理。
例如:在User实体类里有一个方法getOrg(),返回Department对象,但是User实体里面并没有org属性(正因为如此,我称之为非标准写法),这个时候,如果不特殊处理,此处会出现如下异常:
java.lang.StackOverflowError
at com.ctc.wstx.sw.BaseNsStreamWriter.closeStartElement(BaseNsStreamWriter.java:387)
at com.ctc.wstx.sw.BaseNsStreamWriter.checkStartElement(BaseNsStreamWriter.java:436)
at com.ctc.wstx.sw.SimpleNsStreamWriter.writeStartOrEmpty(SimpleNsStreamWriter.java:257)
at com.ctc.wstx.sw.BaseNsStreamWriter.writeStartElement(BaseNsStreamWriter.java:318)
at org.codehaus.xfire.aegis.stax.ElementWriter.writeStartElement(ElementWriter.java:116)
at org.codehaus.xfire.aegis.stax.ElementWriter.
at org.codehaus.xfire.aegis.stax.ElementWriter.getElementWriter(ElementWriter.java:161)
at org.codehaus.xfire.aegis.type.basic.BeanType.getWriter(BeanType.java:421)
at org.codehaus.xfire.aegis.type.basic.BeanType.writeObject(BeanType.java:386)
………………
此时你无法跟踪。
解决办法:在User实体里增加一个org属性,在User.aegis.xml里增加对org属性的配置就行了。
客户端访问方法:
package com.nstar.xfire.client;
import java.util.List;
import java.net.MalformedURLException;
import java.util.ArrayList;
import org.codehaus.xfire.*;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.nstar.xfire.IHelloWordService;
import com.nstar.xfire.Student;
public class HelloWorldClient {
/**
* @param args
*/
public static void main(String[] args){
Service serviceModel = new ObjectServiceFactory().create(IHelloWordService.class);
XFireProxyFactory factory =
XFireProxyFactory(XFireFactory.newInstance().getXFire());
String url = “http://10.232.75.61:8090/Xfire/services/HelloWordService”;
new
try {
IHelloWordService service =(IHelloWordService)factory.create(serviceModel, url);
List list = new ArrayList();
List list1 = new ArrayList();
list.add(new String(“测试”));
int age = service.getAge(“边苏涛”);
String name = service.getName(1);
Student s = service.getOneStudent(27);
list1 = service.getStudent(list);
System.out.println(“边苏涛's age ==”+age);
System.out.println(“学号为1的学生姓名 ”+name);
System.out.println(“age == ”+s.getAge()+“ name == ”+s.getName()+“ list content ”+s.getList().get(0).toString());
System.out.println(list1.size());
for(int i=0;i System.out.println(list1.get(i).toString()); } } catch(MalformedURLException e){ e.printStackTrace(); } } } 买本《java疯狂讲义》 或者 在网上下载下来看看主要看java语法部分和面向对象编程部分这些要速度过 接下来开始写一些小例子 从例子里面学习会更快例子差不多了就开始web方面的涉猎,先学struts->jsp->servlet->hibernate->spring学习javascript .如何学习Java? 3.1 Java学习路线 3.1.1 基础语法及Java原理基础语法和Java原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习Java也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的Java程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得“真正”的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。 3.1.2 OO思想的领悟掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是 CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。 使用面向对象的思想进行开发的基本过程是: ●调查收集需求。●建立用例模型。 ●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。●细化分析模型到设计模型。●用具体的技术去实现。●测试、部署、总结。 3.1.3 基本API的学习进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的“不需要重新发明轮子”。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查看,Java DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查Java DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。 3.1.4 特定API的学习Java介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟 悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。 3.1.5 开发工具的用法在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对Java技术本身的注意力。过了这一阶段你就可以开始熟悉 IDE了。程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。Java开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder 占有的市场份额是最大的。JBuilder在近几年来一直是Java集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的 Java IDE大战中,以其快速的版本更新击败IBM的Visual Age for Java等而成就一番伟业。IBM在Visual Age for Java上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓“柳暗花明又一村”。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。 3.1.6 学习软件工程 对小型项目而言,你可能认为软件工程没太大的必要。随着项目的复杂性越来越高,软件工程的必要性才会体现出来。参见“软件开发学习路线”小节。 3.2学习要点 确立的学习路线之后,我们还需要总结一下Java的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。 3.2.1勤查API文档当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用“Javadoc”工具(包含在JDK中)生成标准的Java DOC文档,供同行使用。J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下载地址:http://Java.sun.com/j2se/1.5.0/download.jsp,你可以到google搜索CHM版本下载。也可以在线查看:http://Java.sun.com/j2se/1.5.0/docs/api/index.html。对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下: ●找特定的包,包一般根据功能组织。●找需要使用类,类命名规范的话我们由类的名字可猜出一二。●选择构造器,大多数使用类的方式是创建对象。●选择你需要的方法。 3.2.2 查书/google->写代码测试->查看源代码->请教别人 当我们遇到问题的时候该如何解决?这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像“某些类/方法如何使用的问题”,DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看 API的源代码验证你的想法。万不得已才去请教别人。 3.2.3学习开源软件的设计思想 Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。 3.2.4 规范的重要性 没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到http://www.xiexiebang.com下载JSRXXX规范,多读规范,这是最权威准确最新的教材。第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时,没给程序作注释,以显示你的编程功底是多么的深厚。这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。Java编码规范到此查看或下载http://Java.sun.com/docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3.2.2节。 3.2.5 不局限于Java 很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。如学习Java集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是“需要的时候再学”的原则。 4.结束语需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在Java神殿之外的朋友有所帮助的话,笔者也欣慰了。哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了。最后奉劝各位程序员尤其是MM程序员,完成工作后赶快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比…… 重点: 1简历制作各式 2简历 3简历 4简历 自我认知。。 我们做什么? 我们能做什么? 我们如何去实现? 我的职业规划如何? 规划符合性格/兴趣/能力? 简历的基本框架 ------------ 基本信息: 姓名 性别 出生年月(22-25)出生年月尽量往中间靠 详细的联系方式(手机号码和电子邮箱) 外语水平(CET-4/CET-6以及JLPT-3) 专业,学历,学校。 政治面貌:中共党员 工作年限? 不到2年写月比如18个月 民族? 一般不用 照片要还是不要?? 什么情况下可以贴。。 注意:电子邮箱避免使用QQ邮箱或数字类邮箱。 非计算机相关专业不体现,放在简历最后单写。 211院校,一本院校在学校后面括号注明。 不体现升高,身体状况,婚否 教育背景 起止日期--学校--专业--学历 各式:2006.9--2010.6×× 大学 计算机科学与技术统招本科 注意:只写搞学历 自考无需标注! 外语能力 各式:CET-4级 能独立阅读计算机相关英文文档,能流利进行英语日常对话JSPT-4级 能阅读日语文档和警醒日常对话 ------------ 求职目标 java开发工程师/白盒测试工程师/ 项目实施/技术支持/运营维护/售前技术支持/ 售后技术支持/销售/ 注意 一份简历只体现一个职位。 有多个求职愿望的,准备多份简历 ------------ 掌握技能 书写方法:按照所学内容的掌握程度或技术类别来写 Core java 框架 Java Web 数据库 服务器 其他(C,PHP,网络协议,Android等) 注意:技术掌握程度修饰词的恰当描述 熟练应用,熟练掌握,熟悉,掌握,了解 熟练Core java Core java 熟练Mysql Oracle数据库,熟练掌握基于Oracle9ide 数据库编程 熟练使用linux unix操作系统 熟练使用 struts,sping,hibernate三大框架 熟悉 Javascript TomcatHtml OOAD UML Rational ------------ 项目经验 项目名称 开发平台(Unix/Linuix) 开发工具(MyEclipse+Tomcat+Mysql) 技术实现(Struts+hib+spring+js+jsp) 项目描述(简单,清除描述)简略 责任描述(描述本人在该项目中负责的模块)微细 项目收获(说明实现过程中遇到的问题及解决方案)全面 项目简介 (1)模拟当当网主要功能(2)主要包含以下功能模块a.产品浏览模块 b.购物车模块 c.用户管理模块 d.创建订单模块 a.Struts2框架 b.JDBC(多表联合查询)+dbcp连接池(控制Connection对象的数量,提高程序的稳定性)连接池的好处:1.时刻与DB连接,避免频繁的创建与销毁Connection对象 2.将Connection控制在一定范围内,保证服务器稳定(3)主要采用哪些技术 max:最大Connection数量,超过让其等待 min:初始Connection数量,不超过可以访问,超过就新建 c.客户端采用JQuery+Ajax ------------ 工作经验 书写格式:起止时间--公司名称--职位 如:2009.6-2010.5 北京光华软件公司软件开发工程师 主要负责.....(所获的技术或者其他能替提升) 注意:不能用空当期,频繁跳槽并且工作性质相近的最好合并。 时间由近及远排列,和计算机相关的工作放在最上面 ------------ 实习经历(培训经历) 各式:2010.3-2010.9 xxxx科技公司Java软件开发工程师 ------------ 所获证书(所获奖项) 2012.9 高级软件工程师国家工信部发 2012.7 OCJP资格认字证书 美国认证 注意:证书,奖项部分分类别,获的过的都要写上(校内,校外) 简历中的大部分内容是经历和成绩 ------------ 自我评价 结构:专业技能 :通过某项市级工作或实习经历或培训,获的;获得什么技能的掌握程度如何 综合能力:通过某项市级做过什么时期描述所得能力,要和未来求职岗位相近 (沟通能力,人际管理和团队精神) 注意:避免顺口溜式的描述 ------------ 兴趣爱好 最好体现出个性。 唱歌/跳舞/上网避免写。如果写也可以,但要体现爱好的程度 ---------- 外观 1-2页左右A4纸 布局 在结构严谨的前提下,层次分明 字体 建议最好2种字体 正文的字体要适中,标题和姓名可以用稍大字体突出 副标题4号,内容5号(宋体) 要考虑打印后的效果和排版 各式:xxx.doc 避免冗长撰写简历还是以简洁精练,重点突出为好 避免虚夸不真实的描述和捏造工作经历和项目 避免过谦叙述客观事实,适当包装资历和能力 避免遗漏要点基本情况/学历/资历/特长/求职意向/联系方式等 避免喧兵夺主有的应聘者为了突出自己一专多能的素质,在写简历时,主次不分,轻重无别;甚至把业余爱好浓墨重彩,喧兵夺主 避免书面差错错别字,排版混乱,数字错误,时间年限的错误 ---------- 招聘会 前程无忧 中华英才网 智联招聘 csdn 一级方式: 招聘会现场/网络投递/直接上门 网络投递的方法: 各网站注册直接点击投递按钮+文本粘贴。 投递时间: 周一至周五上午8:30至9:00最佳投递时间 邮件主题: 姓名+需求+优势 注意:已投简历一定要备份,求职当天随身携带至少5份个人纸质简历。 ---------- 投递的简历why没有回音? 有以下几种原因: 海投的这个单位不是真正的在招聘 信息过期,已经找到合适的人选了 所投职位不相符 能力与企业不想符合,把你淘汰了 HR根本就没有看到你的简历,这与你优秀与否无关 遇到这种情况,我们要怎样处理呢? 电话追过五问问,别忘了说自己的名字,投递至今啊和投递职位 简历市时常更新 使用普遍认知的措辞 简历中所提及的关键字尽量使用普遍认知热措辞,如职务名称等相关经验(个人优势)要重点突出 简历中要体现自己有能力胜任 简历命名 毕业时间.学历.优势(工作年限/中共党员/英语等级) 姓名.岗位 在这一个月的学习中,我们主要学习了Java, Java是一门面向对象的程序设计语言。对于面向对象的概念现在我们只是做了初步的了解,主要是学习了Java的程序结构,包括了循环、数组、类和方法以及字符串处理等内容。其实Java 的这些程序结构和C语言是非常相似的,像for循环,while和do-while循环,switch结构和C语言程序中的结构都是一致的。以前,在学校里学过C语言,所以对于这些基本结构还是有一定的了解的。但是在这里学得比较的透彻,因为以前学得主要还是理论知识,考试的内容也主要局限在理论知识的范围内。在实践上就很欠缺,不知道所学的内容如何能够正确地运用,所以学得比较抽象,而且经常不用就忘记了。 但是在中心学习的期间,能够有很多机会遇到实际的课题和项目,特别是课后练习和上机的题目,以及老师提供给我们的有关学习编程语言的方法和技巧,对于我们巩固所学的理论知识有很大的帮助。特别是在学完整个阶段的Java课程之后,我们还进行了学校信息管理系统,人事管理系统项目的练习,把整本书的知识进行融会贯通,更进一步地提高了我们的处理实际编程问题的能力,对我们以后的学习肯定会有一定的帮助。但是现在我们也只是刚刚开始学习Java语言,所以想真正掌握Java技术,以后还会有很长的一段过程需要我们更加努力地去学习。毕竟,知识需要靠积累才能真正掌握。 所以,通过这一个月的学习,我个人认为,只要每天能够坚持认真学习,并且每天花费一定的时间,一定会有所收获。第二篇:JAVA学习
第三篇:java学习
第四篇:java之简历制作
第五篇:学员JAVA之学习心得