Save This Page
Home » openjdk-7 » com.sun.xml.internal.messaging » saaj » util » [javadoc | source]
    1   /*
    2    * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Sun designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Sun in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
   22    * CA 95054 USA or visit www.sun.com if you need additional information or
   23    * have any questions.
   24    */
   25   
   26   package com.sun.xml.internal.messaging.saaj.util;
   27   
   28   import java.util.logging.Logger;
   29   
   30   import javax.xml.parsers.SAXParser;
   31   import javax.xml.soap.SOAPException;
   32   
   33   import org.xml.sax;
   34   import org.xml.sax.ext.LexicalHandler;
   35   import org.xml.sax.helpers.XMLFilterImpl;
   36   
   37   import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
   38   import org.xml.sax.helpers.AttributesImpl;
   39   
   40   /**
   41    * Users of this class see a SAX2 XMLReader (via XMLFilterImpl).  This
   42    * class creates a parent XMLReader via JAXP and installs itself as a SAX2
   43    * extension LexicalHandler which rejects document type declarations
   44    * because they are not legal in SOAP.  If the user of this class sets a
   45    * LexicalHandler, then it forwards events to that handler.
   46    *
   47    * $Id: RejectDoctypeSaxFilter.java,v 1.13 2006/01/27 12:49:52 vj135062 Exp $
   48    * @author Edwin Goei
   49    */
   50   
   51   public class RejectDoctypeSaxFilter extends XMLFilterImpl implements XMLReader, LexicalHandler{
   52       protected static Logger log =
   53       Logger.getLogger(LogDomainConstants.UTIL_DOMAIN,
   54       "com.sun.xml.internal.messaging.saaj.util.LocalStrings");
   55   
   56       /** Standard SAX 2.0 ext property */
   57       static final String LEXICAL_HANDLER_PROP =
   58       "http://xml.org/sax/properties/lexical-handler";
   59   
   60       static final String WSU_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd".intern();
   61       static final String SIGNATURE_LNAME = "Signature".intern();
   62       static final String ENCRYPTED_DATA_LNAME = "EncryptedData".intern();
   63       static final String DSIG_NS = "http://www.w3.org/2000/09/xmldsig#".intern();
   64       static final String XENC_NS = "http://www.w3.org/2001/04/xmlenc#".intern();
   65       static final String ID_NAME = "ID".intern();
   66   
   67       /** LexicalHandler to forward events to, if any */
   68       private LexicalHandler lexicalHandler;
   69   
   70       public RejectDoctypeSaxFilter(SAXParser saxParser) throws SOAPException {
   71           XMLReader xmlReader;
   72           try {
   73               xmlReader = saxParser.getXMLReader();
   74           } catch (Exception e) {
   75               log.severe("SAAJ0602.util.getXMLReader.exception");
   76               throw new SOAPExceptionImpl(
   77               "Couldn't get an XMLReader while constructing a RejectDoctypeSaxFilter",
   78               e);
   79           }
   80   
   81           // Set ourselves up to be the SAX LexicalHandler
   82           try {
   83               xmlReader.setProperty(LEXICAL_HANDLER_PROP, this);
   84           } catch (Exception e) {
   85               log.severe("SAAJ0603.util.setProperty.exception");
   86               throw new SOAPExceptionImpl(
   87               "Couldn't set the lexical handler property while constructing a RejectDoctypeSaxFilter",
   88               e);
   89           }
   90   
   91           // Set the parent XMLReader of this SAX filter
   92           setParent(xmlReader);
   93       }
   94   
   95       /*
   96        * Override setProperty() to capture any LexicalHandler that is set for
   97        * forwarding of events.
   98        */
   99       public void setProperty(String name, Object value)
  100       throws SAXNotRecognizedException, SAXNotSupportedException {
  101           if (LEXICAL_HANDLER_PROP.equals(name)) {
  102               lexicalHandler = (LexicalHandler) value;
  103           } else {
  104               super.setProperty(name, value);
  105           }
  106       }
  107   
  108       //
  109       // Beginning of SAX LexicalHandler callbacks...
  110       //
  111   
  112       public void startDTD(String name, String publicId, String systemId)
  113       throws SAXException {
  114           throw new SAXException("Document Type Declaration is not allowed");
  115       }
  116   
  117       public void endDTD() throws SAXException {
  118       }
  119   
  120       public void startEntity(String name) throws SAXException {
  121           if (lexicalHandler != null) {
  122               lexicalHandler.startEntity(name);
  123           }
  124       }
  125   
  126       public void endEntity(String name) throws SAXException {
  127           if (lexicalHandler != null) {
  128               lexicalHandler.endEntity(name);
  129           }
  130       }
  131   
  132       public void startCDATA() throws SAXException {
  133           if (lexicalHandler != null) {
  134               lexicalHandler.startCDATA();
  135           }
  136       }
  137   
  138       public void endCDATA() throws SAXException {
  139           if (lexicalHandler != null) {
  140               lexicalHandler.endCDATA();
  141           }
  142       }
  143   
  144       public void comment(char[] ch, int start, int length) throws SAXException {
  145           if (lexicalHandler != null) {
  146               lexicalHandler.comment(ch, start, length);
  147           }
  148       }
  149   
  150       //
  151       // End of SAX LexicalHandler callbacks
  152       //
  153   
  154       public void startElement(String namespaceURI, String localName,
  155       String qName, Attributes atts)   throws SAXException{
  156           if(atts != null ){
  157               boolean eos = false;
  158               if(namespaceURI == DSIG_NS || XENC_NS == namespaceURI){
  159                   eos = true;
  160               }
  161               int length = atts.getLength();
  162               AttributesImpl attrImpl = new AttributesImpl();
  163               for(int i=0; i< length;i++){
  164                   String name = atts.getLocalName(i);
  165                   if(name!=null && (name.equals("Id"))){
  166                       if(eos || atts.getURI(i) == WSU_NS ){
  167                           attrImpl.addAttribute(atts.getURI(i), atts.getLocalName(i),
  168                           atts.getQName(i), ID_NAME, atts.getValue(i));
  169                       }else{
  170                            attrImpl.addAttribute(atts.getURI(i), atts.getLocalName(i), atts.getQName(i), atts.getType(i), atts.getValue(i));
  171                       }
  172                   }else{
  173                       attrImpl.addAttribute(atts.getURI(i), atts.getLocalName(i),
  174                       atts.getQName(i), atts.getType(i), atts.getValue(i));
  175                   }
  176               }
  177               super.startElement(namespaceURI,localName, qName,attrImpl);
  178           }else{
  179               super.startElement(namespaceURI,localName, qName, atts);
  180           }
  181       }
  182   }

Save This Page
Home » openjdk-7 » com.sun.xml.internal.messaging » saaj » util » [javadoc | source]