2010-04-19 23 views
6

Tôi đã sử dụng jdom để xác thực xml dựa trên lược đồ. Vấn đề chính là ở đó mà nó mang lại một lỗitrình xác thực xml nào sẽ hoạt động hoàn hảo cho dự án đa luồng

FWK005 phân tích cú pháp có thể không được gọi trong khi phân tích

Lý do chính là bội số của bài làm việc để xác nhận xerces cùng một lúc. SO tôi đã nhận được giải pháp mà tôi phải khóa xác nhận đó. đó là không tốt

Vì vậy, tôi muốn biết xml validator hoạt động hoàn hảo cho đa luồng dự án

public static HashMap<String, String> validate(String xmlString, Validator validator) { 

    HashMap<String, String> map = new HashMap<String, String>(); 
    long t1 = System.currentTimeMillis(); 
    DocumentBuilder builder = null; 
    try { 
     //obtain lock to proceed 
//   lock.lock(); 

     try { 
      builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
//    Source source = new DOMSource(builder.parse(new ByteArrayInputStream(xmlString.getBytes()))); 

      validator.validate(new StreamSource(new StringReader(xmlString))); 
      map.put("ISVALID", "TRUE"); 
      logger.info("We have successfuly validated the schema"); 
     } catch (Exception ioe) { 
      ioe.printStackTrace(); 
      logger.error("NOT2 VALID STRING IS :" + xmlString); 
      map.put("MSG", ioe.getMessage()); 
      //   logger.error("IOException while validating the input XML", ioe); 
     } 
     logger.info(map); 
     long t2 = System.currentTimeMillis(); 
     logger.info("XML VALIDATION TOOK:::" + (t2 - t1)); 

    } catch (Exception e) { 
     logger.error(e); 
    } finally { 
     //release lock 
//   lock.unlock(); 
     builder = null; 
    } 

    return map; 
} 

Cảm ơn Sunil Kumar Sahoo

Trả lời

4

Tôi không nghĩ rằng bất kỳ xác nhận java xml là threadsafe . Tùy chọn là:

  1. Tạo một trường hợp mới mỗi khi bạn cần phải xác nhận
  2. Tạo một vũng xác nhận rằng bạn kéo từ
  3. Make sử dụng ThreadLocal để bộ nhớ cache trình xác nhận
+3

+1 - nhưng tùy chọn đầu tiên chỉ đơn giản là tạo trình xác thực mới mỗi lần bạn cần. (Các tùy chọn hiện có là tối ưu hóa hiệu suất, và chỉ nên được xem xét nếu bạn * biết chắc chắn * rằng việc tạo ra các cá thể validator sẽ là một nút cổ chai hiệu suất.) –

+0

Điểm rất tốt ở trên từ Stephen C. – Dave

0

Vì đây câu hỏi là về xác nhận hợp lệ XML đa luồng ... lưu ý lỗi này trong java 1.6: javax.xml.validation.Schema is not thread safe

Lớp Schema javadoc tuyên bố nó là an toàn luồng, nhưng đây không phải là t anh ta trong một số phiên bản java. Kết quả là lỗi xác thực không mong muốn khi bạn cố chạy đồng thời hai xác thực.

Cách giải quyết được đề xuất trong báo cáo lỗi là sử dụng phiên bản mới hơn của thư viện xerces.

Các vấn đề liên quan