You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by sv...@apache.org on 2005/06/08 02:07:55 UTC

cvs commit: ws-juddi/src/java/org/apache/juddi/registry AbstractService.java AdminService.java PublishService.java InquiryService.java RegistryServlet.java

sviens      2005/06/07 17:07:55

  Modified:    src/java/org/apache/juddi/registry RegistryServlet.java
  Added:       src/java/org/apache/juddi/registry AbstractService.java
                        AdminService.java PublishService.java
                        InquiryService.java
  Log:
  Distributed UDDI operations from the single RegistryServlet into the Inquiry, Publish and Admin Servlets.
  
  Revision  Changes    Path
  1.27      +2 -353    ws-juddi/src/java/org/apache/juddi/registry/RegistryServlet.java
  
  Index: RegistryServlet.java
  ===================================================================
  RCS file: /home/cvs/ws-juddi/src/java/org/apache/juddi/registry/RegistryServlet.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- RegistryServlet.java	25 May 2005 17:04:48 -0000	1.26
  +++ RegistryServlet.java	8 Jun 2005 00:07:55 -0000	1.27
  @@ -18,40 +18,13 @@
   import java.io.IOException;
   import java.io.InputStream;
   import java.util.Properties;
  -import java.util.Vector;
   
   import javax.servlet.ServletConfig;
   import javax.servlet.ServletException;
   import javax.servlet.http.HttpServlet;
  -import javax.servlet.http.HttpServletRequest;
  -import javax.servlet.http.HttpServletResponse;
  -import javax.xml.parsers.DocumentBuilder;
  -import javax.xml.parsers.DocumentBuilderFactory;
  -import javax.xml.parsers.ParserConfigurationException;
  -import javax.xml.soap.Detail;
  -import javax.xml.soap.MessageFactory;
  -import javax.xml.soap.SOAPBody;
  -import javax.xml.soap.SOAPElement;
  -import javax.xml.soap.SOAPException;
  -import javax.xml.soap.SOAPFault;
  -import javax.xml.soap.SOAPMessage;
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  -import org.apache.juddi.IRegistry;
  -import org.apache.juddi.datatype.RegistryObject;
  -import org.apache.juddi.datatype.response.DispositionReport;
  -import org.apache.juddi.datatype.response.ErrInfo;
  -import org.apache.juddi.datatype.response.Result;
  -import org.apache.juddi.error.BusyException;
  -import org.apache.juddi.error.FatalErrorException;
  -import org.apache.juddi.error.RegistryException;
  -import org.apache.juddi.error.UnsupportedException;
  -import org.apache.juddi.handler.HandlerMaker;
  -import org.apache.juddi.handler.IHandler;
  -import org.apache.juddi.util.Config;
  -import org.w3c.dom.Document;
  -import org.w3c.dom.Element;
   
   /**
    * This servlet is ONLY used to initialize the jUDDI webapp on
  @@ -69,12 +42,6 @@
      
     // private reference to the webapp's logger.
     private static Log log = LogFactory.getLog(RegistryServlet.class);
  -  
  -  // jUDDI XML Handler maker
  -  private static HandlerMaker maker = HandlerMaker.getInstance();
  -  
  -  // XML Document Builder
  -  private static DocumentBuilder docBuilder = null;
   
     // registry singleton instance
     private static RegistryEngine registry = null;
  @@ -126,10 +93,10 @@
                     RegistryEngine.DEFAULT_OPERATOR_NAME);
           
           props.put(RegistryEngine.PROPNAME_I18N_LANGUAGE_CODE,
  -            RegistryEngine.DEFAULT_I18N_LANGUAGE_CODE);
  +            			RegistryEngine.DEFAULT_I18N_LANGUAGE_CODE);
     
           props.put(RegistryEngine.PROPNAME_I18N_COUNTRY_CODE,
  -            RegistryEngine.DEFAULT_I18N_COUNTRY_CODE);
  +            			RegistryEngine.DEFAULT_I18N_COUNTRY_CODE);
     
           props.put(RegistryEngine.PROPNAME_DISCOVERY_URL,
                     RegistryEngine.DEFAULT_DISCOVERY_URL);
  @@ -189,292 +156,6 @@
       registry = new RegistryEngine(props);
       registry.init();
     }
  -
  -  /**
  -   *
  -   */
  -  public void doGet(HttpServletRequest req, HttpServletResponse res)
  -    throws ServletException, IOException
  -  {
  -    res.setHeader("Allow","POST");
  -    res.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED,"Use of the " +
  -      "HTTP request method 'GET' is not allowed by UDDI specification.");
  -  }
  -
  -  /**
  -   *
  -   */
  -  public void doPost(HttpServletRequest req, HttpServletResponse res)
  -    throws ServletException, IOException
  -  {
  -    res.setContentType("text/xml; charset=utf-8");        
  -
  -    SOAPMessage soapReq = null;
  -    SOAPMessage soapRes = null;
  -
  -    try 
  -    {
  -      // Create a MessageFactory, parse the XML found
  -      // in the HTTP payload into a SOAP request message 
  -      // and create a new SOAP response message.
  -
  -      MessageFactory msgFactory = MessageFactory.newInstance();
  -      soapReq = msgFactory.createMessage(null,req.getInputStream());
  -      soapRes = msgFactory.createMessage();
  -           
  -      // Extract the UDDI request from the SOAPBody
  -      // of the SOAP Request message. If a UDDI request
  -      // message does not exist within the SOAP Body
  -      // then throw a FatalErrorException and indicate
  -      // that this is a Client-side (consumer) error.
  -
  -      SOAPBody soapReqBody = soapReq.getSOAPBody();
  -      Element uddiReq = (Element)soapReqBody.getFirstChild();
  -      if (uddiReq == null)
  -        throw new FatalErrorException("A UDDI request was not " +
  -          "found in the SOAP message.");
  -      
  -      // Grab the local name of the UDDI request element
  -      // from the UDDI Request. If a value isn't returned 
  -      // (either null or an empty String is returned) then 
  -      // throw a FatalError exception. This is probably a 
  -      // configuration problem related to the XML Parser 
  -      // that jUDDI is using.
  -      
  -      String function = uddiReq.getLocalName();
  -      if ((function == null) || (function.trim().length() == 0))
  -        throw new FatalErrorException("The UDDI request type " +
  -          "could not be identified.");
  -      
  -      // Lookup the appropriate XML handler.  Throw an 
  -      // UnsupportedException if one could not be located.
  -
  -      IHandler requestHandler = maker.lookup(function);
  -      if (requestHandler == null)
  -        throw new UnsupportedException("The UDDI request " +
  -          "type specified is unknown or unsupported: " +function);
  -      
  -      // Grab the generic attribute value.  If one isn't 
  -      // specified or the value specified is not "2.0" then 
  -      // throw an exception (this value must be specified 
  -      // for all UDDI requests and currently only vesion 2.0
  -      // UDDI requests are supported).
  -
  -      String generic = uddiReq.getAttribute("generic");
  -      if (generic == null)
  -        throw new FatalErrorException("A UDDI generic attribute " +
  -          "value was not found for UDDI request: "+function+" (The " +
  -          "'generic' attribute must be present)");
  -      else if (!generic.equals(IRegistry.UDDI_V2_GENERIC))
  -        throw new UnsupportedException("Currently only UDDI v2 " +
  -          "requests are supported. The generic attribute value " +
  -          "received was: "+generic);
  -
  -      // Unmarshal the raw xml into the appropriate jUDDI
  -      // request object.
  -
  -      RegistryObject uddiReqObj = requestHandler.unmarshal(uddiReq);
  -      
  -      // Grab a reference to the shared jUDDI registry 
  -      // instance (make sure it's running) and execute the 
  -      // requested UDDI function.
  -      
  -      RegistryObject uddiResObj = null;      
  -      RegistryEngine registry = RegistryServlet.getRegistry();
  -      if ((registry != null) && (registry.isAvailable()))
  -        uddiResObj = registry.execute(uddiReqObj);
  -      else
  -        throw new BusyException("The Registry is currently unavailable.");
  -      
  -      // Lookup the appropriate response handler which will
  -      // be used to marshal the UDDI object into the appropriate 
  -      // xml format.
  -      
  -      IHandler responseHandler = maker.lookup(uddiResObj.getClass().getName());
  -      if (responseHandler == null)
  -        throw new FatalErrorException("The response object " +
  -          "type is unknown: " +uddiResObj.getClass().getName());
  -      
  -      // Create a new 'temp' XML element to use as a container 
  -      // in which to marshal the UDDI response data into.
  -        
  -      DocumentBuilder docBuilder = getDocumentBuilder();
  -      Document document = docBuilder.newDocument();
  -      Element element = document.createElement("temp");
  -        
  -      // Lookup the appropriate response handler and marshal 
  -      // the juddi object into the appropriate xml format (we 
  -      // only support UDDI v2.0 at this time).  Attach the
  -      // results to the body of the SOAP response.
  -        
  -      responseHandler.marshal(uddiResObj,element);
  -      
  -      // Grab a reference to the 'temp' element's
  -      // only child here (this has the effect of
  -      // discarding the temp element) and append 
  -      // this child to the soap response body
  -      
  -      document.appendChild(element.getFirstChild());
  -      soapRes.getSOAPBody().addDocument(document);
  -    } 
  -    catch(Exception ex) // Catch ALL exceptions
  -    {
  -      // SOAP Fault values
  -      String faultCode = null;
  -      String faultString = null;
  -      String faultActor = null;
  -      
  -      // UDDI DispositionReport values
  -      String errno = null;
  -      String errCode = null;
  -      String errText = null;
  -      
  -      // All RegistryException and subclasses of RegistryException
  -      // should contain values for populating a SOAP Fault as well
  -      // as a UDDI DispositionReport with specific information 
  -      // about the problem.
  -      //
  -      // We've got to dig out the dispositionReport and populate  
  -      // the SOAP Fault 'detail' element with this information.        
  -      
  -      if (ex instanceof RegistryException)
  -      {
  -        // Since we've intercepted a RegistryException type
  -        // then we can assume this is a "controlled" event
  -        // and simply log the error message without a stack
  -        // trace.
  -
  -        log.error(ex.getMessage());
  -
  -        RegistryException rex = (RegistryException)ex;
  -        
  -        faultCode = rex.getFaultCode();  // SOAP Fault faultCode
  -        faultString = rex.getFaultString();  // SOAP Fault faultString
  -        faultActor = rex.getFaultActor();  // SOAP Fault faultActor
  -        
  -        DispositionReport dispRpt = rex.getDispositionReport();
  -        if (dispRpt != null)
  -        {
  -          Result result = null;
  -          ErrInfo errInfo = null;
  -        
  -          Vector results = dispRpt.getResultVector();
  -          if ((results != null) && (!results.isEmpty()))
  -            result = (Result)results.elementAt(0);
  -        
  -          if (result != null)
  -          {
  -            errno = String.valueOf(result.getErrno());  // UDDI Result errno
  -            errInfo = result.getErrInfo();
  -          
  -            if (errInfo != null)
  -            {
  -              errCode = errInfo.getErrCode();  // UDDI ErrInfo errCode
  -              errText = errInfo.getErrMsg();  // UDDI ErrInfo errMsg
  -            }
  -          }
  -        }
  -      }
  -      else if (ex instanceof SOAPException)
  -      {
  -        log.error(ex.getMessage());
  -          
  -        // Because something occured that jUDDI wasn't expecting
  -        // let's set default SOAP Fault values.  Since SOAPExceptions
  -        // here are most likely XML validation errors let's blame the
  -        // client by placing "Client" in the Fault Code and pass
  -        // the Exception message back to the client.
  -        
  -        faultCode = "Client";
  -        faultString = ex.getMessage();
  -        faultActor = null;
  -        
  -        // Let's set default values for the UDDI DispositionReport
  -        // here.  While we didn't catch a RegistryException (or 
  -        // subclass) we're going to be friendly and include a
  -        // FatalError DispositionReport within the message from the 
  -        // SAX parsing problem in the SOAP Fault anyway.
  -        
  -        errno = String.valueOf(Result.E_FATAL_ERROR);
  -        errCode = Result.lookupErrCode(Result.E_FATAL_ERROR); 
  -        errText = Result.lookupErrText(Result.E_FATAL_ERROR) + 
  -                  " " + ex.getMessage();
  -      }
  -      else // anything else
  -      {
  -        // All other exceptions (other than SOAPException or 
  -        // RegistryException and subclasses) are either a result 
  -        // of a jUDDI configuration problem or something that 
  -        // we *should* be catching and converting to a 
  -        // RegistryException but are not (yet!).
  -            
  -        log.error(ex.getMessage(),ex);
  -
  -        // Because something occured that jUDDI wasn't expecting
  -        // let's set default SOAP Fault values.  Since jUDDI
  -        // should be catching anything significant let's blame 
  -        // jUDDI by placing "Server" in the Fault Code and pass
  -        // the Exception message on to the client.
  -        
  -        faultCode = "Server";
  -        faultString = ex.getMessage();
  -        faultActor = null;
  -          
  -        // Let's set default values for the UDDI DispositionReport
  -        // here.  While we didn't catch a RegistryException (or 
  -        // subclass) but we're going to be friendly and include a
  -        // FatalError DispositionReport within the SOAP Fault anyway.
  -        
  -        errno = String.valueOf(Result.E_FATAL_ERROR);
  -        errCode = Result.lookupErrCode(Result.E_FATAL_ERROR); 
  -        errText = Result.lookupErrText(Result.E_FATAL_ERROR) +
  -                  " An internal UDDI server error has " +
  -                  "occurred. Please report this error " +
  -                  "to the UDDI server administrator.";
  -      }
  -      
  -      // We should have everything we need to assemble 
  -      // the SOAPFault so lets piece it together and 
  -      // send it on it's way.
  -      
  -      try {
  -        SOAPBody soapResBody = soapRes.getSOAPBody();     
  -        SOAPFault soapFault = soapResBody.addFault();
  -        soapFault.setFaultCode(faultCode);
  -        soapFault.setFaultString(faultString);
  -        soapFault.setFaultActor(faultActor);
  -        
  -        // We're always going to include a DispositionReport (for
  -        // the hell of it) so that's what we're doing here.
  -       
  -        Detail faultDetail = soapFault.addDetail();
  -        
  -        SOAPElement dispRpt = faultDetail.addChildElement("dispositionReport","",IRegistry.UDDI_V2_NAMESPACE);        
  -        dispRpt.setAttribute("generic",IRegistry.UDDI_V2_GENERIC);
  -        dispRpt.setAttribute("operator",Config.getOperator());
  -        
  -        SOAPElement result = dispRpt.addChildElement("result");
  -        result.setAttribute("errno",errno);
  -        
  -        SOAPElement errInfo = result.addChildElement("errInfo");
  -        errInfo.setAttribute("errCode",errCode);
  -        errInfo.setValue(errText);
  -      } 
  -      catch (Exception e) { // if we end up in here it's just NOT good.
  -        log.error("A serious error has occured while assembling the SOAP Fault.",e);
  -      }
  -    }
  -    finally 
  -    {
  -      try {  
  -        soapRes.setProperty(SOAPMessage.WRITE_XML_DECLARATION,"true");
  -        soapRes.writeTo(res.getOutputStream()); 
  -      }
  -      catch(SOAPException sex) {
  -        log.error(sex);
  -      }
  -    }
  -  }
     
     /**
      * Grab the shared instance of jUDDI's Registry class and
  @@ -500,36 +181,4 @@
     {
       return registry;
     }
  -
  -  /**
  -   *
  -   */
  -  private DocumentBuilder getDocumentBuilder()
  -  {
  -    if (docBuilder == null)
  -      docBuilder = createDocumentBuilder();    
  -    return docBuilder;
  -  }
  -
  -  /**
  -   *
  -   */
  -  private synchronized DocumentBuilder createDocumentBuilder()
  -  {
  -    if (docBuilder != null)
  -      return docBuilder;
  -
  -    try {
  -     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  -     //factory.setNamespaceAware(true);
  -     //factory.setValidating(true);
  -
  -     docBuilder = factory.newDocumentBuilder();
  -    }
  -    catch(ParserConfigurationException pcex) {
  -      pcex.printStackTrace();
  -    }
  -
  -    return docBuilder;
  -  }
   }
  \ No newline at end of file
  
  
  
  1.1                  ws-juddi/src/java/org/apache/juddi/registry/AbstractService.java
  
  Index: AbstractService.java
  ===================================================================
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.juddi.registry;
  
  import java.io.IOException;
  import java.util.Vector;
  
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
  import javax.xml.parsers.ParserConfigurationException;
  import javax.xml.soap.Detail;
  import javax.xml.soap.MessageFactory;
  import javax.xml.soap.SOAPBody;
  import javax.xml.soap.SOAPElement;
  import javax.xml.soap.SOAPException;
  import javax.xml.soap.SOAPFault;
  import javax.xml.soap.SOAPMessage;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.juddi.IRegistry;
  import org.apache.juddi.datatype.RegistryObject;
  import org.apache.juddi.datatype.response.DispositionReport;
  import org.apache.juddi.datatype.response.ErrInfo;
  import org.apache.juddi.datatype.response.Result;
  import org.apache.juddi.error.BusyException;
  import org.apache.juddi.error.FatalErrorException;
  import org.apache.juddi.error.RegistryException;
  import org.apache.juddi.error.UnsupportedException;
  import org.apache.juddi.handler.HandlerMaker;
  import org.apache.juddi.handler.IHandler;
  import org.apache.juddi.util.Config;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  /**
   * @author Steve Viens (sviens@apache.org)
   */
  public abstract class AbstractService extends HttpServlet
  {
    // private reference to the webapp's logger.
    private static Log log = LogFactory.getLog(AbstractService.class);
    
    // XML Document Builder
    private static DocumentBuilder docBuilder = null;
  
    /**
     *
     */
    public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException
    {
      res.setHeader("Allow","POST");
      res.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED,"Use of the " +
        "HTTP request method 'GET' is not allowed by UDDI specification.");
    }
  
    /**
     *
     */
    public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException
    {
      res.setContentType("text/xml; charset=utf-8");        
  
      SOAPMessage soapReq = null;
      SOAPMessage soapRes = null;
  
      try 
      {
        // Create a MessageFactory, parse the XML found
        // in the HTTP payload into a SOAP request message 
        // and create a new SOAP response message.
  
        MessageFactory msgFactory = MessageFactory.newInstance();
        soapReq = msgFactory.createMessage(null,req.getInputStream());
        soapRes = msgFactory.createMessage();
             
        // Extract the UDDI request from the SOAPBody
        // of the SOAP Request message. If a UDDI request
        // message does not exist within the SOAP Body
        // then throw a FatalErrorException and indicate
        // that this is a Client-side (consumer) error.
  
        SOAPBody soapReqBody = soapReq.getSOAPBody();
        Element uddiReq = (Element)soapReqBody.getFirstChild();
        if (uddiReq == null)
          throw new FatalErrorException("A UDDI request was not " +
            "found in the SOAP message.");
        
        // Grab the local name of the UDDI request element
        // from the UDDI Request. If a value isn't returned 
        // (either null or an empty String is returned) then 
        // throw a FatalError exception. This is probably a 
        // configuration problem related to the XML Parser 
        // that jUDDI is using.
        
        String operation = uddiReq.getLocalName();
        if ((operation == null) || (operation.trim().length() == 0))
          throw new FatalErrorException("The UDDI service operation " +
            "could not be identified.");
        
        // Grab the generic attribute value (version value).  If 
        // one isn't specified or the value specified is not "2.0" 
        // then throw an exception (this value must be specified 
        // for all UDDI requests and currently only vesion 2.0
        // UDDI requests are supported).
  
        String version = uddiReq.getAttribute("generic");
        if (version == null)
          throw new FatalErrorException("A UDDI generic attribute " +
            "value was not found for UDDI request: "+operation+" (The " +
            "'generic' attribute must be present)");
  
        // Verify that the appropriate endpoint was targeted for
        // this service request.  The validateRequest method will
        // throw an UnsupportedException if anything's amiss.
  
        validateRequest(operation,version,uddiReq);
        
        // Lookup the appropriate XML handler.  Throw an 
        // UnsupportedException if one could not be located.
  
        HandlerMaker maker = HandlerMaker.getInstance();
  			IHandler requestHandler = maker.lookup(operation);
        if (requestHandler == null)
          throw new UnsupportedException("The UDDI service operation " +
            "specified is unknown or unsupported: " +operation);
        
        // Unmarshal the raw xml into the appropriate jUDDI
        // request object.
  
        RegistryObject uddiReqObj = requestHandler.unmarshal(uddiReq);
        
        // Grab a reference to the shared jUDDI registry 
        // instance (make sure it's running) and execute the 
        // requested UDDI function.
        
        RegistryObject uddiResObj = null;      
        RegistryEngine registry = RegistryServlet.getRegistry();
        if ((registry != null) && (registry.isAvailable()))
          uddiResObj = registry.execute(uddiReqObj);
        else
          throw new BusyException("The Registry is currently unavailable.");
        
        // Lookup the appropriate response handler which will
        // be used to marshal the UDDI object into the appropriate 
        // xml format.
        
        IHandler responseHandler = maker.lookup(uddiResObj.getClass().getName());
        if (responseHandler == null)
          throw new FatalErrorException("The response object " +
            "type is unknown: " +uddiResObj.getClass().getName());
        
        // Create a new 'temp' XML element to use as a container 
        // in which to marshal the UDDI response data into.
          
        DocumentBuilder docBuilder = getDocumentBuilder();
        Document document = docBuilder.newDocument();
        Element element = document.createElement("temp");
          
        // Lookup the appropriate response handler and marshal 
        // the juddi object into the appropriate xml format (we 
        // only support UDDI v2.0 at this time).  Attach the
        // results to the body of the SOAP response.
          
        responseHandler.marshal(uddiResObj,element);
        
        // Grab a reference to the 'temp' element's
        // only child here (this has the effect of
        // discarding the temp element) and append 
        // this child to the soap response body
        
        document.appendChild(element.getFirstChild());
        soapRes.getSOAPBody().addDocument(document);
      } 
      catch(Exception ex) // Catch ALL exceptions
      {
        // SOAP Fault values
        String faultCode = null;
        String faultString = null;
        String faultActor = null;
        
        // UDDI DispositionReport values
        String errno = null;
        String errCode = null;
        String errText = null;
        
        // All RegistryException and subclasses of RegistryException
        // should contain values for populating a SOAP Fault as well
        // as a UDDI DispositionReport with specific information 
        // about the problem.
        //
        // We've got to dig out the dispositionReport and populate  
        // the SOAP Fault 'detail' element with this information.        
        
        if (ex instanceof RegistryException)
        {
          // Since we've intercepted a RegistryException type
          // then we can assume this is a "controlled" event
          // and simply log the error message without a stack
          // trace.
  
          log.error(ex.getMessage());
  
          RegistryException rex = (RegistryException)ex;
          
          faultCode = rex.getFaultCode();  // SOAP Fault faultCode
          faultString = rex.getFaultString();  // SOAP Fault faultString
          faultActor = rex.getFaultActor();  // SOAP Fault faultActor
          
          DispositionReport dispRpt = rex.getDispositionReport();
          if (dispRpt != null)
          {
            Result result = null;
            ErrInfo errInfo = null;
          
            Vector results = dispRpt.getResultVector();
            if ((results != null) && (!results.isEmpty()))
              result = (Result)results.elementAt(0);
          
            if (result != null)
            {
              errno = String.valueOf(result.getErrno());  // UDDI Result errno
              errInfo = result.getErrInfo();
            
              if (errInfo != null)
              {
                errCode = errInfo.getErrCode();  // UDDI ErrInfo errCode
                errText = errInfo.getErrMsg();  // UDDI ErrInfo errMsg
              }
            }
          }
        }
        else if (ex instanceof SOAPException)
        {
          log.error(ex.getMessage());
            
          // Because something occured that jUDDI wasn't expecting
          // let's set default SOAP Fault values.  Since SOAPExceptions
          // here are most likely XML validation errors let's blame the
          // client by placing "Client" in the Fault Code and pass
          // the Exception message back to the client.
          
          faultCode = "Client";
          faultString = ex.getMessage();
          faultActor = null;
          
          // Let's set default values for the UDDI DispositionReport
          // here.  While we didn't catch a RegistryException (or 
          // subclass) we're going to be friendly and include a
          // FatalError DispositionReport within the message from the 
          // SAX parsing problem in the SOAP Fault anyway.
          
          errno = String.valueOf(Result.E_FATAL_ERROR);
          errCode = Result.lookupErrCode(Result.E_FATAL_ERROR); 
          errText = Result.lookupErrText(Result.E_FATAL_ERROR) + 
                    " " + ex.getMessage();
        }
        else // anything else
        {
          // All other exceptions (other than SOAPException or 
          // RegistryException and subclasses) are either a result 
          // of a jUDDI configuration problem or something that 
          // we *should* be catching and converting to a 
          // RegistryException but are not (yet!).
              
          log.error(ex.getMessage(),ex);
  
          // Because something occured that jUDDI wasn't expecting
          // let's set default SOAP Fault values.  Since jUDDI
          // should be catching anything significant let's blame 
          // jUDDI by placing "Server" in the Fault Code and pass
          // the Exception message on to the client.
          
          faultCode = "Server";
          faultString = ex.getMessage();
          faultActor = null;
            
          // Let's set default values for the UDDI DispositionReport
          // here.  While we didn't catch a RegistryException (or 
          // subclass) but we're going to be friendly and include a
          // FatalError DispositionReport within the SOAP Fault anyway.
          
          errno = String.valueOf(Result.E_FATAL_ERROR);
          errCode = Result.lookupErrCode(Result.E_FATAL_ERROR); 
          errText = Result.lookupErrText(Result.E_FATAL_ERROR) +
                    " An internal UDDI server error has " +
                    "occurred. Please report this error " +
                    "to the UDDI server administrator.";
        }
        
        // We should have everything we need to assemble 
        // the SOAPFault so lets piece it together and 
        // send it on it's way.
        
        try {
          SOAPBody soapResBody = soapRes.getSOAPBody();     
          SOAPFault soapFault = soapResBody.addFault();
          soapFault.setFaultCode(faultCode);
          soapFault.setFaultString(faultString);
          soapFault.setFaultActor(faultActor);
          
          // We're always going to include a DispositionReport (for
          // the hell of it) so that's what we're doing here.
         
          Detail faultDetail = soapFault.addDetail();
          
          SOAPElement dispRpt = faultDetail.addChildElement("dispositionReport","",IRegistry.UDDI_V2_NAMESPACE);        
          dispRpt.setAttribute("generic",IRegistry.UDDI_V2_GENERIC);
          dispRpt.setAttribute("operator",Config.getOperator());
          
          SOAPElement result = dispRpt.addChildElement("result");
          result.setAttribute("errno",errno);
          
          SOAPElement errInfo = result.addChildElement("errInfo");
          errInfo.setAttribute("errCode",errCode);
          errInfo.setValue(errText);
        } 
        catch (Exception e) { // if we end up in here it's just NOT good.
          log.error("A serious error has occured while assembling the SOAP Fault.",e);
        }
      }
      finally 
      {
        try {  
          soapRes.setProperty(SOAPMessage.WRITE_XML_DECLARATION,"true");
          soapRes.writeTo(res.getOutputStream()); 
        }
        catch(SOAPException sex) {
          log.error(sex);
        }
      }
    }
  
    /**
     * 
     */
    public abstract void validateRequest(String operation,String generic,Element uddiReq)
    	throws RegistryException;
    
    /**
     *
     */
    private DocumentBuilder getDocumentBuilder()
    {
      if (docBuilder == null)
        docBuilder = createDocumentBuilder();    
      return docBuilder;
    }
  
    /**
     *
     */
    private synchronized DocumentBuilder createDocumentBuilder()
    {
      if (docBuilder != null)
        return docBuilder;
  
      try {
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       //factory.setNamespaceAware(true);
       //factory.setValidating(true);
  
       docBuilder = factory.newDocumentBuilder();
      }
      catch(ParserConfigurationException pcex) {
        pcex.printStackTrace();
      }
  
      return docBuilder;
    }
  }
  
  
  1.1                  ws-juddi/src/java/org/apache/juddi/registry/AdminService.java
  
  Index: AdminService.java
  ===================================================================
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.juddi.registry;
  
  import java.util.TreeSet;
  
  import javax.servlet.ServletConfig;
  import javax.servlet.ServletException;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.juddi.IRegistry;
  import org.apache.juddi.error.FatalErrorException;
  import org.apache.juddi.error.RegistryException;
  import org.apache.juddi.error.UnsupportedException;
  import org.w3c.dom.Element;
  
  /**
   * @author Steve Viens (sviens@apache.org)
   */
  public class AdminService extends AbstractService 
  {
    // private reference to the webapp's logger.
    private static Log log = LogFactory.getLog(AdminService.class);
  
    // collection of valid operations
    private TreeSet operations = null;
  
    public void init(ServletConfig config) 
      throws ServletException
    {
      super.init(config); 
    	
    	operations = new TreeSet();
    	operations.add("get_registryinfo");
    	operations.add("find_publisher");
    	operations.add("get_publisherdetail");
    	operations.add("save_publisher");
    	operations.add("delete_publisher");
    }
    
    public void validateRequest(String operation,String version,Element uddiReq)
  		throws RegistryException
  	{
      // Grab the generic attribute value.  If one isn't 
      // specified or the value specified is not "1.0" then 
      // throw an exception (this value must be specified 
      // for all UDDI requests and the endpoint called only 
      // supports UDDI version 1.0 requests).
  
      if (version == null)
        throw new FatalErrorException("A jUDDI generic attribute " +
          "value was not found for UDDI request: "+operation+" (The " +
          "'generic' attribute must be present)");
      else if (!version.equals(IRegistry.JUDDI_V1_GENERIC))
        throw new UnsupportedException("Only jUDDI v1 requests " +
          "are currently supported. The generic attribute value " +
          "received was: "+version);
  
      if ((operation == null) || (operation.trim().length() == 0))
        throw new FatalErrorException("The jUDDI service operation " +
          "could not be identified.");
      else if (!operations.contains(operation.toLowerCase()))
      	throw new UnsupportedException("The operation "+operation+" is not " +
      			"supported by the jUDDI Admin API.");
  	}
  }
  
  
  
  1.1                  ws-juddi/src/java/org/apache/juddi/registry/PublishService.java
  
  Index: PublishService.java
  ===================================================================
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.juddi.registry;
  
  import java.util.TreeSet;
  
  import javax.servlet.ServletConfig;
  import javax.servlet.ServletException;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.juddi.IRegistry;
  import org.apache.juddi.error.FatalErrorException;
  import org.apache.juddi.error.RegistryException;
  import org.apache.juddi.error.UnsupportedException;
  import org.apache.juddi.registry.AbstractService;
  import org.w3c.dom.Element;
  
  /**
   * @author Steve Viens (sviens@apache.org)
   */
  public class PublishService extends AbstractService
  {
    // private reference to the webapp's logger.
    private static Log log = LogFactory.getLog(PublishService.class);
  
    // collection of valid operations
    private TreeSet operations = null;
  
    public void init(ServletConfig config) 
    	throws ServletException
  	{
    	super.init(config);   	
    	
    	operations = new TreeSet();
    	operations.add("get_authtoken");
    	operations.add("get_registeredinfo");
    	operations.add("discard_authtoken");
    	operations.add("save_business");
    	operations.add("save_service");
    	operations.add("save_binding");
    	operations.add("save_tmodel");
    	operations.add("delete_business");
    	operations.add("delete_service");
    	operations.add("delete_binding");
    	operations.add("delete_tmodel");
    	operations.add("add_publisherassertions");
    	operations.add("set_publisherassertions");
    	operations.add("get_publisherassertions");
    	operations.add("delete_publisherassertions");
    	operations.add("get_assertionstatusreport");
  	}
  
    public void validateRequest(String operation,String version,Element uddiReq)
  		throws RegistryException
  	{
      // If the value 
    	// specified is not "2.0" then throw an exception (this 
    	// value must be specified for all UDDI requests and 
    	// only version 2.0 UDDI requests are supported by 
    	// this endpoint).
  
    	if (version == null)
        throw new FatalErrorException("A UDDI generic attribute " +
          "value was not found for UDDI request: "+operation+" (The " +
          "'generic' attribute must be present)");
      else if (!version.equals(IRegistry.UDDI_V2_GENERIC))
        throw new UnsupportedException("Only UDDI v2 " +
          "requests are currently supported. The generic attribute value " +
          "received was: "+version);
  
      if ((operation == null) || (operation.trim().length() == 0))
        throw new FatalErrorException("The UDDI service operation " +
          "could not be identified.");
      else if (!operations.contains(operation.toLowerCase()))
      	throw new UnsupportedException("The operation "+operation+" is not " +
      			"supported by the UDDI version 2 Publish API.");
  	}
  }
  
  
  
  1.1                  ws-juddi/src/java/org/apache/juddi/registry/InquiryService.java
  
  Index: InquiryService.java
  ===================================================================
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.juddi.registry;
  
  import java.util.TreeSet;
  
  import javax.servlet.ServletConfig;
  import javax.servlet.ServletException;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.juddi.IRegistry;
  import org.apache.juddi.error.FatalErrorException;
  import org.apache.juddi.error.RegistryException;
  import org.apache.juddi.error.UnsupportedException;
  import org.w3c.dom.Element;
  
  /**
   * @author Steve Viens (sviens@apache.org)
   */
  public class InquiryService extends AbstractService
  {
    // private reference to the webapp's logger.
    private static Log log = LogFactory.getLog(InquiryService.class);
    
    // collection of valid operations
    private TreeSet operations = null;
  
    public void init(ServletConfig config) 
    	throws ServletException
  	{
    	super.init(config); 
    	
    	operations = new TreeSet();
    	operations.add("find_business");
    	operations.add("find_service");
    	operations.add("find_binding");
    	operations.add("find_tmodel");
    	operations.add("find_relatedbusinesses");
    	operations.add("get_businessdetail");
    	operations.add("get_businessdetailext");
    	operations.add("get_servicedetail");
    	operations.add("get_bindingdetail");
    	operations.add("get_tmodeldetail");
  	}
  
    public void validateRequest(String operation,String version,Element uddiReq)
  		throws RegistryException
  	{
      // If the value 
    	// specified is not "2.0" then throw an exception (this 
    	// value must be specified for all UDDI requests and 
    	// only version 2.0 UDDI requests are supported by 
    	// this endpoint).
  
    	if (version == null)
        throw new FatalErrorException("A UDDI generic attribute " +
          "value was not found for UDDI request: "+operation+" (The " +
          "'generic' attribute must be present)");
      else if (!version.equals(IRegistry.UDDI_V2_GENERIC))
        throw new UnsupportedException("Only UDDI v2 " +
          "requests are currently supported. The generic attribute value " +
          "received was: "+version);
  
      if ((operation == null) || (operation.trim().length() == 0))
        throw new FatalErrorException("The UDDI service operation " +
          "could not be identified.");
      else if (!operations.contains(operation.toLowerCase()))
      	throw new UnsupportedException("The operation "+operation+" is not " +
      			"supported by the UDDI version 2 Inquiry API.");
  	}
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: juddi-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: juddi-cvs-help@ws.apache.org