当前位置: 移动技术网 > IT编程>开发语言>Java > java实现简单的webservice方式

java实现简单的webservice方式

2019年07月22日  | 移动技术网IT编程  | 我要评论

本文实例为大家分享了java实现webservice方式的具体代码,供大家参考,具体内容如下

经过测试 jdk1.6.10以下会出现bug 建议使用10以上版本

1、定义接口

package org.enson.chan;
 
import javax.jws.webservice;
import javax.jws.soap.soapbinding;
 
@webservice
@soapbinding(style=soapbinding.style.rpc)
public interface imyservice {
 public int add(int a , int b);
 
 public int max(int a , int b);
}

2、实现接口

package org.enson.chan;
import javax.jws.webservice;

@webservice(endpointinterface="org.enson.chan.imyservice")
public class myserviceimpl implements imyservice {

 public int add(int a, int b) {
 system.out.println(a+"+"+b+"="+(a+b));
 return a+b;
 }

 public int max(int a, int b) {
 system.out.println("a与b比较大小,取大值"+((a>b)?a:b));
 return (a>b)?a:b;
 }

}

3、定义服务

package org.enson.chan;
 
import javax.xml.ws.endpoint;
 
public class myserver {
 
 public static void main(string[] args) {
 string address = "http://localhost:8090/ns";
 endpoint.publish(address, new myserviceimpl());
 }
}

4、测试服务

package org.enson.chan;

import java.net.malformedurlexception;
import java.net.url;

import javax.xml.namespace.qname;
import javax.xml.ws.service;

public class testclient {

 public static void main(string[] args) {
 try {
  url url = new url("http://localhost:8090/ns?wsdl");
  qname sname = new qname("http://chan.enson.org/", "myserviceimplservice");
  //创建服务
  service service = service.create(url,sname);
  //实现接口
  imyservice ms = service.getport(imyservice.class);
  system.out.println(ms.add(12,33));
  //以上服务有问题,依然依赖于imyservie接口
 } catch (malformedurlexception e) {
  // todo auto-generated catch block
  e.printstacktrace();
 }
 }

}

5、testsoap

import java.io.ioexception;
import java.io.stringreader;
import java.io.stringwriter;
import java.net.url;

import javax.xml.bind.jaxbcontext;
import javax.xml.bind.jaxbexception;
import javax.xml.bind.marshaller;
import javax.xml.namespace.qname;
import javax.xml.soap.messagefactory;
import javax.xml.soap.soapbody;
import javax.xml.soap.soapbodyelement;
import javax.xml.soap.soapenvelope;
import javax.xml.soap.soapexception;
import javax.xml.soap.soapheader;
import javax.xml.soap.soapmessage;
import javax.xml.soap.soappart;
import javax.xml.transform.source;
import javax.xml.transform.transformer;
import javax.xml.transform.transformerconfigurationexception;
import javax.xml.transform.transformerexception;
import javax.xml.transform.transformerfactory;
import javax.xml.transform.transformerfactoryconfigurationerror;
import javax.xml.transform.dom.domresult;
import javax.xml.transform.stream.streamsource;
import javax.xml.ws.dispatch;
import javax.xml.ws.service;
import javax.xml.ws.soap.soapfaultexception;
import javax.xml.xpath.xpath;
import javax.xml.xpath.xpathconstants;
import javax.xml.xpath.xpathexpressionexception;
import javax.xml.xpath.xpathfactory;

import org.junit.test;
import org.soap.service.user;
import org.w3c.dom.document;
import org.w3c.dom.node;
import org.w3c.dom.nodelist;


public class testsoap {
 
 private string ns = "http://service.soap.org/";
 private string wsdlurl = "http://localhost:8989/ms?wsdl";

 @test
 public void test01() {
 try {

  messagefactory factory = messagefactory.newinstance();
  
  soapmessage message = factory.createmessage();

  soappart part = message.getsoappart();

  soapenvelope envelope = part.getenvelope();

  soapbody body = envelope.getbody();

  qname qname = new qname("http://java.zttc.edu.cn/webservice", 
   "add","ns");//<ns:add xmlns="http://java.zttc.edu.cn/webservice"/>

  //body.addbodyelement(qname).setvalue("<a>1</a><b>2</b>");
  soapbodyelement ele = body.addbodyelement(qname);
  ele.addchildelement("a").setvalue("22");
  ele.addchildelement("b").setvalue("33");

  message.writeto(system.out);
 } catch (soapexception e) {
  e.printstacktrace();
 } catch (ioexception e) {
  e.printstacktrace();
 }
 }
 
 @test
 public void test02() {
 try {
  url url = new url(wsdlurl);
  qname sname = new qname(ns,"myserviceimplservice");
  service service = service.create(url,sname);
  
  dispatch<soapmessage> dispatch = service.createdispatch(new qname(ns,"myserviceimplport"),
   soapmessage.class, service.mode.message);
  
  soapmessage msg = messagefactory.newinstance().createmessage();
  soapenvelope envelope = msg.getsoappart().getenvelope();
  soapbody body = envelope.getbody();
  
  qname ename = new qname(ns,"add","nn");//<nn:add xmlns="xx"/>
  soapbodyelement ele = body.addbodyelement(ename);
  ele.addchildelement("a").setvalue("22");
  ele.addchildelement("b").setvalue("33");
  msg.writeto(system.out);
  system.out.println("\n invoking.....");
  
  
  soapmessage response = dispatch.invoke(msg);
  response.writeto(system.out);
  system.out.println();
  
  document doc = response.getsoappart().getenvelope().getbody().extractcontentasdocument();
  string str = doc.getelementsbytagname("addresult").item(0).gettextcontent();
  system.out.println(str);
 } catch (soapexception e) {
  e.printstacktrace();
 } catch (ioexception e) {
  e.printstacktrace();
 }
 }
 
 @test
 public void test03() {
 try {
  url url = new url(wsdlurl);
  qname sname = new qname(ns,"myserviceimplservice");
  service service = service.create(url,sname);
  
  dispatch<source> dispatch = service.createdispatch(new qname(ns,"myserviceimplport"),
   source.class, service.mode.payload);
  
  user user = new user(3,"zs","张三","11111");
  jaxbcontext ctx = jaxbcontext.newinstance(user.class);
  marshaller mar = ctx.createmarshaller();
  mar.setproperty(marshaller.jaxb_fragment, true);
  stringwriter writer= new stringwriter();
  mar.marshal(user, writer);
  
  string payload = "<nn:adduser xmlns:nn=\""+ns+"\">"+writer.tostring()+"</nn:adduser>";
  system.out.println(payload);
  streamsource rs = new streamsource(new stringreader(payload));
  
  source response = (source)dispatch.invoke(rs);
  
  transformer tran = transformerfactory.newinstance().newtransformer();
  domresult result = new domresult();
  tran.transform(response, result);
  
  xpath xpath = xpathfactory.newinstance().newxpath();
  nodelist nl = (nodelist)xpath.evaluate("//user", result.getnode(),xpathconstants.nodeset);
  user ru = (user)ctx.createunmarshaller().unmarshal(nl.item(0));
  system.out.println(ru.getnickname());
 } catch (ioexception e) {
  e.printstacktrace();
 } catch (jaxbexception e) {
  e.printstacktrace();
 } catch (transformerconfigurationexception e) {
  e.printstacktrace();
 } catch (transformerfactoryconfigurationerror e) {
  e.printstacktrace();
 } catch (transformerexception e) {
  e.printstacktrace();
 } catch (xpathexpressionexception e) {
  e.printstacktrace();
 }
 }
 
 @test
 public void test04() {
 try {
  url url = new url(wsdlurl);
  qname sname = new qname(ns,"myserviceimplservice");
  service service = service.create(url,sname);
  
  dispatch<soapmessage> dispatch = service.createdispatch(new qname(ns,"myserviceimplport"),
   soapmessage.class, service.mode.message);
  
  soapmessage msg = messagefactory.newinstance().createmessage();
  soapenvelope envelope = msg.getsoappart().getenvelope();
  soapbody body = envelope.getbody();
  
  soapheader header = envelope.getheader();
  if(header==null) header = envelope.addheader();
  qname hname = new qname(ns,"authinfo","nn");
  header.addheaderelement(hname).setvalue("aabbccdd");
  
  qname ename = new qname(ns,"list","nn");//<nn:add xmlns="xx"/>
  body.addbodyelement(ename);
  msg.writeto(system.out);
  system.out.println("\n invoking.....");
  
  
  soapmessage response = dispatch.invoke(msg);
  response.writeto(system.out);
  system.out.println();
  
  document doc = response.getsoapbody().extractcontentasdocument();
  nodelist nl = doc.getelementsbytagname("user");
  jaxbcontext ctx = jaxbcontext.newinstance(user.class);
  for(int i=0;i<nl.getlength();i++) {
  node n = nl.item(i);
  user u = (user)ctx.createunmarshaller().unmarshal(n);
  system.out.println(u.getnickname());
  }
 } catch (soapexception e) {
  e.printstacktrace();
 } catch (ioexception e) {
  e.printstacktrace();
 } catch (jaxbexception e) {
  e.printstacktrace();
 }
 }
 
 @test
 public void test05() {
 try {
  url url = new url(wsdlurl);
  qname sname = new qname(ns,"myserviceimplservice");
  service service = service.create(url,sname);
  
  dispatch<soapmessage> dispatch = service.createdispatch(new qname(ns,"myserviceimplport"),
   soapmessage.class, service.mode.message);
  
  soapmessage msg = messagefactory.newinstance().createmessage();
  soapenvelope envelope = msg.getsoappart().getenvelope();
  soapbody body = envelope.getbody();
  
  qname ename = new qname(ns,"login","nn");//<nn:add xmlns="xx"/>
  soapbodyelement ele = body.addbodyelement(ename);
  ele.addchildelement("username").setvalue("ss");
  ele.addchildelement("password").setvalue("dd");
  msg.writeto(system.out);
  system.out.println("\n invoking.....");
  
  
  soapmessage response = dispatch.invoke(msg);
  response.writeto(system.out);
  system.out.println();
  
 } catch(soapfaultexception e){
  system.out.println(e.getmessage());
 } catch (soapexception e) {
  e.printstacktrace();
 } catch (ioexception e) {
  e.printstacktrace();
 } 
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网