Esempio n. 1
0
  public BindingDetail findBinding(FindBinding body) throws DispositionReportFaultMessage {
    long startTime = System.nanoTime();
    try {
      new ValidateInquiry(null).validateFindBinding(body);
    } catch (DispositionReportFaultMessage drfm) {
      long procTime = System.nanoTime() - startTime;
      serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.FAILED, procTime);
      throw drfm;
    }

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();

      if (isAuthenticated()) this.getEntityPublisher(em, body.getAuthInfo());

      org.apache.juddi.query.util.FindQualifiers findQualifiers =
          new org.apache.juddi.query.util.FindQualifiers();
      findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());

      List<?> keysFound = InquiryHelper.findBinding(body, findQualifiers, em);

      if (keysFound.size() == 0) {
        if (body.getServiceKey() != null) {
          // Check that we were passed a valid serviceKey per
          // 5.1.12.4 of the UDDI v3 spec
          String serviceKey = body.getServiceKey();
          org.apache.juddi.model.BusinessService modelBusinessService = null;
          try {
            em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
          } catch (ClassCastException e) {
          }
          if (modelBusinessService == null)
            throw new InvalidKeyPassedException(
                new ErrorMessage("errors.invalidkey.ServiceNotFound", serviceKey));
        }
      }
      BindingDetail result =
          InquiryHelper.getBindingDetailFromKeys(body, findQualifiers, em, keysFound);
      tx.rollback();
      long procTime = System.nanoTime() - startTime;
      serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.SUCCESS, procTime);

      return result;
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }