今天小研究了下xfire,eclipse下建xfire工程和建新的xifire web service很方便,主要代码有下面几个:
web.xml里面配置xfireServlet.这跟struts是一个原理,相当于一个前端控制器,所有的ws请求都通过这个 XFireConfigurableServlet转发。XFireConfigurableServlet再通过读取services.xml去mapping具体的业务bean。
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
services.xml中配置一个新的web service:
<service>
<name>beanservice</name>
<serviceClass>com.mypack.Hello</serviceClass>
<implementationClass>com.mypack.HelloImpl</implementationClass>
<style>wrapped</style>
<use>literal</use>
<inHandlers>
<handler handlerClass="com.mypack.XfireAuthenticationHandler"></handler>
</inHandlers>
<scope>application</scope>
</service>
其中inHandlers是为了实现handler方式的安全验证。
XfireAuthenticationHandler类从org.codehaus.xfire.handler.AbstractHandler继承,需要重写invoke方法实现自己的验证逻辑:
public void invoke(MessageContext ctx) throws Exception {
// Check if header exists
Element header = ctx.getInMessage().getHeader();
if (header == null) {
throw new XFireRuntimeException("Missing SOAP Header");
}
// Does it have version tag
Element name = header.getChild("USERNAME",Namespace.getNamespace(NS));
Element pass = header.getChild("PASSWORD",Namespace.getNamespace(NS));
if(name.getValue().equals(USERNAME) && pass.getValue().equals(PASSWORD)){
System.out.println("验证通过");
}
else{
System.out.println("验证未通过");
throw new XFireRuntimeException("Authentication Failure");
}
ctx.setProperty("USERNAME", USERNAME);
ctx.setProperty("PASSWORD", PASSWORD);
}
这样服务端就基本完成了。
客户端需要在原有基础上加上相应的身份验证,新建ClientHeaderHandler类,一样需要从org.codehaus.xfire.handler.AbstractHandler继承,一样重写invoke方法:
private static final String USERNAME = "87654321";
private static final String PASSWORD = "12345678";
private static final String NS = "http://xfire.codehaus.org/biansutao";
public void invoke(MessageContext ctx) throws Exception {
Element header = ctx.getOutMessage().getOrCreateHeader();
header.addContent(new Element("USERNAME", NS).addContent(USERNAME));
header.addContent(new Element("PASSWORD", NS).addContent(PASSWORD));
}
客户端调用服务的方法:
String wsdl = "/beanservice.wsdl"; //对应的WSDL文件
Resource resource = new ClassPathResource(wsdl);
Client client = new Client(resource.getInputStream(), null); //根据WSDL创建客户实例
client.addOutHandler(new ClientHeaderHandler());
Object[] objArray = new Object[1];
objArray[0] = "eric";
//调用特定的Web Service方法
Object[] results = client.invoke("sayHello", objArray);
其中client.addOutHandler(new ClientHeaderHandler());是加入身份验证。
这样,一个带身份验证的xfire版helloworld就完成了。
分享到:
相关推荐
NULL 博文链接:https://wander312.iteye.com/blog/1180698
xfire+spring+安全认证,包含服务端和客户端,xfire jar包可以从我的资源下面下或网上很多。
xfire-all-1.2.6 xfire所需的全部包
数据同步服务端。采用xfire框架开发的webservice数据同步程序。
xfire的安全策略,验证、签名、加密的详细做法,含有详细例子,看完后完全掌握xfire的ws-security实现方法
XFire--Webservice入门xfire
XFire1.2.6完整版JAR包 XFire1.2.6完整版JAR包XFire1.2.6完整版JAR包XFire1.2.6完整版JAR包
activation.jar commons-logging.jar jdom-1.0.jar spring.jar spring-mock.jar stax-api-1.0.1.jar stax-utils-snapshot-20040917.jar wsdl4j-1.5.2.jar wstx-asl-3.0.1.jar ...xfire-xmlbeans-1.2.2.jar
Xfire API 对开发web services有帮助!编写程序时作为参考!
Xfire案例
XFire完整入门教程XFire完整入门教程XFire完整入门教程XFire完整入门教程
1、以下四个类调用了XmlSchema-1.1.jar包 因与cxf包xmlschema-core-*.jar... xfire-all-1.2.6-incomplete.jar 替换 xfire-all-1.2.6.jar 3、XmlSchema-1.1.jar 可以与 xmlschema-core-*.jar 共存避开同路径同名类冲突
1、以下四个类调用了XmlSchema-1.1.jar包 因与cxf包xmlschema-core-*.jar... xfire-all-1.2.6-incomplete.jar 替换 xfire-all-1.2.6.jar 3、XmlSchema-1.1.jar 可以与 xmlschema-core-*.jar 共存避开同路径同名类冲突
xfire-1.2.6.rar xfire-1.2.6.rar xfire-1.2.6.rar
xfire 1.26 博文链接:https://qgl.iteye.com/blog/119726
myeclipse10 安装xfire插件包
进行WebService开发中所用到的xfire所有相关包如:xfire-jsr181-api-1.0-M1.jar、xfire-jaxws-1.2.6.jar、xfire-java5-1.2.6.jar、xfire-core-1.2.6.jar、xfire-annotations-1.2.6.jar、xfire-aegis-1.2.6.jar、...
spring xfire spring 集成xfire 比较好的一种方式