JavaでWebサービスメソッドを完成させる方法の紹介

黄舟
リリース: 2017-05-15 09:46:52
オリジナル
2397 人が閲覧しました

この記事では主に Java の簡単な Web サービスのメソッドを詳しく紹介します。興味のある方は参考にしてください。

この記事のサンプルでは、​​Web サービスを実装するための具体的なコードを共有します。 、具体的な内容は以下の通りです

テスト後、jdk1.6.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);
}
ログイン後にコピー

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();
 } 
 }
}
ログイン後にコピー

【関連する推奨事項】

1.

特別な推奨事項: 「php Programmer Toolbox」V0.1 バージョンのダウンロード

2.

Javaの無料ビデオチュートリアル

3.

YMPオンラインマニュアル

以上がJavaでWebサービスメソッドを完成させる方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!