文档章节

在@WebMethod中产生一个错误

柳哥
 柳哥
发布于 2014/04/15 14:22
字数 832
阅读 81
收藏 0

我们先上一个示例,先定义服务端代码:

HelloWordOne.java:

package ch05.ts;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface HelloWordOne {
	@WebMethod
	void sayHello(String name,String hw) throws HelloException;
}

HelloWordOneImpl.java:

package ch05.ts;

import javax.jws.WebService;

@WebService(endpointInterface = "ch05.ts.HelloWordOne")
public class HelloWordOneImpl implements HelloWordOne {
	@Override
	public void sayHello(String name, String hw) throws HelloException {
		if(null != name && !"".equals(name)){
			System.out.println(name + ":" + hw);
		}else{
			throw new HelloException("name is null","名称不能为空");
		}
	}
}

HelloException.java,这个是自定义的异常类:

package ch05.ts;

public class HelloException extends Exception {
	private String details;
	public HelloException(String reason,String details){
		super(reason);
		this.details = details;
	}
	public String getFaultInfo(){
		return details;
	}
}

HelloWordOnePublisher.java,服务发布类:

package ch05.ts;

import javax.xml.ws.Endpoint;

public class HelloWordOnePublisher {
	public static void main(String[] args) {
		Endpoint.publish("http://localhost:8765/ts", new HelloWordOneImpl());
	}
}

根据发布的服务生成的WSDL文档,创建客户端代码:

HelloWordOne.java,HelloWordOneImplService.java,ObjectFactory.java,package-info.java,SayHello.java,SayHelloResponse.java 这些类源文件我们就不列出来了,因为我们都见过,与以前的例子差不太多。这里我们主要列下面三个。

HelloException.java:

package ch05.client;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;

/**
 * <p>Java class for HelloException complex type.
 * <p>The following schema fragment specifies the expected content 
 * contained within this class.
 * <pre>
 * &lt;complexType name="HelloException">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="faultInfo" type="{http://www.w3.org/2001/XMLSchema}string" 
 *             minOccurs="0"/>
 *         &lt;element name="message" type="{http://www.w3.org/2001/XMLSchema}string" 
 *             minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "HelloException", propOrder = {
    "faultInfo",
    "message"
})
public class HelloException {

    protected String faultInfo;
    protected String message;

    /**
     * Gets the value of the faultInfo property.
     * @return
     * possible object is
     * {@link String }  
     */
    public String getFaultInfo() {
        return faultInfo;
    }

    /**
     * Sets the value of the faultInfo property.
     * @param value
     * allowed object is
     * {@link String }
     */
    public void setFaultInfo(String value) {
        this.faultInfo = value;
    }

    /**
     * Gets the value of the message property.
     * @return
     * possible object is
     * {@link String } 
     */
    public String getMessage() {
        return message;
    }

    /**
     * Sets the value of the message property.
     * @param value
     * allowed object is
     * {@link String }  
     */
    public void setMessage(String value) {
        this.message = value;
    }
}

HelloException_Exception.java:

package ch05.client;

import javax.xml.ws.WebFault;

/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.2.4-b01
 * Generated source version: 2.2
 */
@WebFault(name = "HelloException", targetNamespace = "http://ts.ch05/")
public class HelloException_Exception extends Exception {
    /**
     * Java type that goes as soapenv:Fault detail element.
     */
    private HelloException faultInfo;

    /**
     * @param message
     * @param faultInfo
     */
    public HelloException_Exception(String message, HelloException faultInfo) {
        super(message);
        this.faultInfo = faultInfo;
    }

    /**
     * @param message
     * @param faultInfo
     * @param cause
     */
    public HelloException_Exception(String message, HelloException faultInfo, 
        Throwable cause) {
        super(message, cause);
        this.faultInfo = faultInfo;
    }

    /**
     * @return
     * returns fault bean: ch05.client.HelloException
     */
    public HelloException getFaultInfo() {
        return faultInfo;
    }
}

HelloWordOneClient.java,客户端调用服务:

package ch05.client;

public class HelloWordOneClient {
	public static void main(String[] args) {
		HelloWordOneImplService service = new HelloWordOneImplService();
		HelloWordOne port = service.getHelloWordOneImplPort();
		try {
			port.sayHello("", "good morning");
		} catch (HelloException_Exception e) {
			//这里打印:name is null
			e.printStackTrace();
			//这里打印:名称不能为空
			System.out.println(e.getFaultInfo().getFaultInfo());
		}
	}
}

这里故意抛出一个HelloException异常!执行结果为:

这个示例中,我们定义了一个自定义异常类:HelloException,作为服务声明的异常。发布服务后,随之产生的WSDL文档与普通的WSDL有些不同。WSDL中包括一个消息定义以实现异常。同时在portType部分,除常见的输入和输出消息外,还包括了一个错误消息。下面是相关的WSDL片段:

<message name="sayHello">
    <part name="parameters" element="tns:sayHello"/>
</message>
<message name="sayHelloResponse">
    <part name="parameters" element="tns:sayHelloResponse"/>
</message>
<message name="HelloException">
    <part name="fault" element="tns:HelloException"/>
</message>
<portType name="HelloWordOne">
    <operation name="sayHello">
        <input wsam:Action="http://ts.ch05/HelloWordOne/sayHelloRequest" 
            message="tns:sayHello"/>
        <output wsam:Action="http://ts.ch05/HelloWordOne/sayHelloResponse" 
            message="tns:sayHelloResponse"/>
        <fault message="tns:HelloException" name="HelloException" 
            wsam:Action="http://ts.ch05/HelloWordOne/sayHello/Fault/HelloException"/>
    </operation>
</portType>

注意:java中实现SOAP报错的异常类必须包括一个拥有两个输入参数的构造方法,其中第一个参数用来传入产生错误的具体原因,第二个参数用来提供相关错误的额外信息。同时在异常类中还必须定义一个getFaultInfo方法,返回错误的详细信息。

© 著作权归作者所有

柳哥
粉丝 207
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
Java 字节码工具 ASM 在 web services 开发中的应用

在基于 JAX-WS 标准的 web services 的开发中,不少实际场景都是希望采用自底向上的开发方式, 即基于已有的 Java bean 来创建 web services 。WebSphere Application Server ( 以下简称 WA...

IBMdW
2011/09/26
2.1K
2
探索基于.NET下实现一句话木马之asmx篇

0x01 前言 上篇介绍了一般处理程序(ashx)的工作原理以及实现一句话木马的过程,今天接着介绍Web Service程序 (asmx)下的工作原理和如何实现一句话木马,当然介绍之前笔者找到了一款asmx马...

Ivan1ee
01/16
0
0
WebService连接winfrom简单实例

C# 创建、部署和调用WebService的简单示例 webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互。 具体详细用法可去查询资料。下面开始创建一个简单的webservice的例子。这里...

记事本
04/13
0
0
求教:WebService如何传递一个TreeView类型的参数啊?

传递TreeView类型的参数时就会出错 [WebMethod(Description = "此服务根据传入的用户Id(Session中UserId属性的值)和页面中TreeView的名称 完 成对TreeView数据的生成设定,此服务没有返回值...

薛向阳
2010/11/12
795
0
Web Services 学习笔记(二) - java 基础实践

1.服务端 首先编写曝露方法 import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class HelloWebService { @WebMethod public String hello(String name) { Syst......

晨猫
2018/01/30
21
0

没有更多内容

加载失败,请刷新页面

加载更多

领域驱动中的“贫血症和失忆症” --实践领域驱动--原文

贫血症严重危害着人类健康,并且伴随有危险的副作用。当贫血领域对象被首次提出来时,它并不是一个博得赞美的词汇,它描述的是一个缺少内在行为领域对象。奇怪的是,人们对于贫血领域对象的态...

还仙
28分钟前
5
0
条码打印软件中标签预览正常打印无反应怎么解决

在使用条码打印软件制作标签时,有客户反馈,标签打印预览正常的,但是打印无反应,咨询是怎么回事?今天针对这个情况,可以参考以下方法进行解决。 一、预览正常情况下,打印没反应 (1)在条码...

中琅软件
38分钟前
5
0
判断字符串的时候

判断字符串的时候一定把常量房前边, //报警程度 String leve = vo.getDeviceAlertDeal().getWarnLevel(); if(("0").equals(leve)) { row.add("无报警"); }else if(("1").equals(leve)) { ro......

简小姐
38分钟前
7
0
Linux maven3.6.2 install

PS:安装 maven 之前请先安装 jdk 1.安装 wget 命令(安装过就不用了) yum -y install wget 2.寻找需要的 maven 版本 https://maven.apache.org/download.cgi 3.进入 /var/local 文件夹 cd...

东方神祇
40分钟前
5
0
Tomcat源码分析二:先看看Tomcat的整体架构

Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server、Service、Connector、Container等组件,接下...

flygrk
43分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部