java实现简单的webservice方式

作者:梦想如歌! 时间:2023-11-25 03:59:58 

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

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();
}
}
}

标签:java,webservice
0
投稿

猜你喜欢

  • C#实现贪吃蛇小游戏

    2022-09-28 17:17:59
  • 解析Mybatis SqlSessionFactory初始化原理

    2022-07-09 04:24:05
  • Android UI效果之绘图篇(四)

    2022-08-07 19:26:12
  • Android利用Sensor(传感器)实现指南针小功能

    2021-12-27 14:22:36
  • java多线程之铁路售票系统

    2022-01-31 12:25:14
  • 详解Java中字符流与字节流的区别

    2023-01-14 00:19:58
  • Java8中的Stream 流实践操作

    2021-11-01 19:59:33
  • java版十大排序经典算法:完整代码(3)

    2021-07-17 05:09:09
  • android监听返回按钮事件的方法

    2021-12-22 04:57:57
  • 基于WPF实现代码查看器控件

    2022-10-06 03:32:11
  • mybatis-plus 查询传入参数Map,返回List<Map>方式

    2022-01-05 13:39:24
  • C#中foreach语句深入研究

    2022-11-15 00:30:17
  • SpringBoot v2.2以上重复读取Request Body内容的解决方案

    2022-06-27 11:00:16
  • C#如何安全、高效地玩转任何种类的内存之Span的本质

    2022-10-23 10:59:15
  • Android RecyclerView item选中放大被遮挡问题详解

    2023-04-11 17:58:31
  • Java基于Socket实现网络编程实例详解

    2023-11-23 12:22:37
  • C#操作CSV文件类实例

    2023-04-29 13:49:44
  • 在Spring中编写事务的介绍

    2021-12-15 10:33:18
  • struts2如何使用拦截器进行用户权限控制实例

    2023-02-23 18:14:15
  • SpringBoot在Controller层接收参数的n种姿势(超详细)

    2023-01-28 00:54:39
  • asp之家 软件编程 m.aspxhome.com