wsdlcontenthandler.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 316 行

JAVA
316
字号
/* * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the *   Free SoftwareFoundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */package com.caucho.soap.wsdl;import com.caucho.log.Log;import com.caucho.util.IntMap;import com.caucho.util.L10N;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import javax.xml.namespace.QName;import java.util.logging.Logger;/** * WSDL Content handler */public class WSDLContentHandler extends DefaultHandler {  private final static Logger log = Log.open(WSDLContentHandler.class);  private final static L10N L = new L10N(WSDLContentHandler.class);  private final static String WSDL = "http://schemas.xmlsoap.org/wsdl/";  private final static int TOP = 0;  private final static int WSDL_DEFINITIONS = 1;  private final static int WSDL_IMPORT = 2;  private final static int WSDL_TYPES = 3;  private final static int WSDL_MESSAGE = 4;  private final static int WSDL_PORT_TYPE = 5;  private final static int WSDL_BINDING = 6;  private final static int WSDL_SERVICE = 7;  private final static int WSDL_PART = 8;  private final static int WSDL_OPERATION = 9;  private final static int WSDL_INPUT = 10;  private final static int WSDL_OUTPUT = 11;  private final static int WSDL_FAULT = 12;  private final static int WSDL_PORT = 13;  private final static int WSDL_BINDING_OPERATION = 14;  private final static IntMap _keywords = new IntMap();  private int _state = TOP;  /**   * Starts a WSDL element.   */  public void startElement (String uri, String localName,                            String qName, Attributes attributes)    throws SAXException  {    QName qname = new QName(uri, localName);    switch (_state) {    case TOP:      switch (getKeyword(qname)) {      case WSDL_DEFINITIONS:        _state = WSDL_DEFINITIONS;        break;      default:        throw error(L.l("Expected <wsdl:descriptions> at <{0}>.", qName));      }      break;          case WSDL_DEFINITIONS:      switch (getKeyword(qname)) {      case WSDL_IMPORT:        _state = WSDL_IMPORT;        break;      case WSDL_TYPES:        _state = WSDL_TYPES;        break;      case WSDL_MESSAGE:        _state = WSDL_MESSAGE;        break;      case WSDL_PORT_TYPE:        _state = WSDL_PORT_TYPE;        break;      case WSDL_BINDING:        _state = WSDL_BINDING;        break;      case WSDL_SERVICE:        _state = WSDL_SERVICE;        break;      default:        throw error(L.l("<{0}> is an unexpected tag.", qName));      }      break;          case WSDL_MESSAGE:      switch (getKeyword(qname)) {      case WSDL_PART:        _state = WSDL_PART;        break;              default:        throw error(L.l("<{0}> is an unexpected tag.", qName));      }      break;          case WSDL_PORT_TYPE:      switch (getKeyword(qname)) {      case WSDL_OPERATION:        _state = WSDL_OPERATION;        break;              default:        throw error(L.l("<{0}> is an unexpected tag.", qName));      }      break;          case WSDL_BINDING:      switch (getKeyword(qname)) {      case WSDL_OPERATION:        _state = WSDL_BINDING_OPERATION;        break;              default:        throw error(L.l("<{0}> is an unexpected tag.", qName));      }      break;          case WSDL_SERVICE:      switch (getKeyword(qname)) {      case WSDL_PORT:        _state = WSDL_PORT;        break;              default:        throw error(L.l("<{0}> is an unexpected tag.", qName));      }      break;    default:      throw error(L.l("<{0}> is an unexpected tag.", qName));    }  }    /**   * Ends a WSDL element.   */  public void endElement (String uri, String localName, String qName)    throws SAXException  {    QName qname = new QName(uri, localName);    switch (_state) {    case WSDL_DEFINITIONS:      if (getKeyword(qname) == WSDL_DEFINITIONS)        _state = TOP;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_IMPORT:      if (getKeyword(qname) == WSDL_IMPORT)        _state = WSDL_DEFINITIONS;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_TYPES:      if (getKeyword(qname) == WSDL_TYPES)        _state = WSDL_DEFINITIONS;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_MESSAGE:      if (getKeyword(qname) == WSDL_MESSAGE)        _state = WSDL_DEFINITIONS;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_PORT_TYPE:      if (getKeyword(qname) == WSDL_PORT_TYPE)        _state = WSDL_DEFINITIONS;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_BINDING:      if (getKeyword(qname) == WSDL_BINDING)        _state = WSDL_DEFINITIONS;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_SERVICE:      if (getKeyword(qname) == WSDL_SERVICE)        _state = WSDL_DEFINITIONS;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_PART:      if (getKeyword(qname) == WSDL_PART)        _state = WSDL_MESSAGE;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_OPERATION:      if (getKeyword(qname) == WSDL_OPERATION)        _state = WSDL_PORT_TYPE;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_INPUT:      if (getKeyword(qname) == WSDL_INPUT)        _state = WSDL_OPERATION;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_OUTPUT:      if (getKeyword(qname) == WSDL_OUTPUT)        _state = WSDL_OPERATION;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_FAULT:      if (getKeyword(qname) == WSDL_FAULT)        _state = WSDL_OPERATION;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_PORT:      if (getKeyword(qname) == WSDL_PORT)        _state = WSDL_SERVICE;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;          case WSDL_BINDING_OPERATION:      if (getKeyword(qname) == WSDL_OPERATION)        _state = WSDL_BINDING;      else        throw error(L.l("</{0}> is an unexpected end tag.", qName));      break;    default:      throw error(L.l("</{0}> is an unexpected end tag.", qName));    }  }  /**   * Returns the keyword for the name.   */  private int getKeyword(QName qname)  {    return _keywords.get(qname);  }  /**   * Throws an error.   */  private SAXException error(String msg)  {    return new SAXException(msg);  }  static {    _keywords.put(new QName(WSDL, "descriptions"), WSDL_DEFINITIONS);    _keywords.put(new QName(WSDL, "import"), WSDL_IMPORT);    _keywords.put(new QName(WSDL, "types"), WSDL_TYPES);    _keywords.put(new QName(WSDL, "message"), WSDL_MESSAGE);    _keywords.put(new QName(WSDL, "portType"), WSDL_PORT_TYPE);    _keywords.put(new QName(WSDL, "binding"), WSDL_BINDING);    _keywords.put(new QName(WSDL, "service"), WSDL_SERVICE);    _keywords.put(new QName(WSDL, "part"), WSDL_PART);    _keywords.put(new QName(WSDL, "operation"), WSDL_OPERATION);    _keywords.put(new QName(WSDL, "input"), WSDL_INPUT);    _keywords.put(new QName(WSDL, "output"), WSDL_OUTPUT);    _keywords.put(new QName(WSDL, "fault"), WSDL_FAULT);    _keywords.put(new QName(WSDL, "port"), WSDL_PORT);  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?