<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Copyright 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.
-->
<s1 title="Reporting Bugs">
  <s2 title="Before you report a bug">
  <p>Before you report a bug, please, <em>read</em> the following instructions:</p>
  <ul>
  <li>If doubt exists whether the behaviour in question is a bug or a feature, 
      please post a message to the 
      <jump href="http://xml.apache.org/mail.html#xalan-j-users">xalan-j-users@xml.apache.org</jump>
      list for clarification.</li>
  <li>To help eliminate duplicate or invalid bug reports, please take a quick look at
      bugs in JIRA to see whether the bug has been already reported and/or fixed. 
      You can also download the 
      <link idref="downloads">latest code</link>
      and check if you can reproduce the bug.</li>
  <li>Report bugs against the newest release.</li>
  </ul>
  <p>We strongly encourage you to write patches for problems you find and attach
     them to your JIRA issue. Being specific in the description of your bug report, and 
     providing enough information to reproduce the bug will improve the likelihood that 
     bugs, adding enhancements, and addressing outstanding design issues, we need your 
     active participation in the ongoing development of Xalan Java.</p>  
  </s2>
  
  <s2 title="Bugzilla is not used">
    <p>
      The old bug tracking system, 
      <jump href="http://issues.apache.org/bugzilla/">bugzilla</jump>,
      is still available but please only use it to look up old bugs.
      Bugzilla has been replaced by <jump href="http://issues.apache.org/jira/browse/XALANJ">JIRA</jump>
      and old bugzilla <em>bugs</em> have been migrated to JIRA as <em>issues</em>.
    </p>
  </s2>
  
<s2 title="Report a bug">  
  <p>After reading the instructions above, click 
     <jump href="http://issues.apache.org/jira/browse/XALANJ">here</jump> to submit a bug report using JIRA.
  </p>
  <p>
     Note that the functionality shown by the JIRA user interface changes depending on whether
     you <em>Log In</em> or not. In particular, to have the <em>CREATE NEW ISSUE</em> link 
     you will need to click the <em>Log In</em> in small font, in the top right corner
     of the page and log in.
  </p>
  <p>
     <note>
       If you had a bugzilla account previously, and had used it with Xalan bugzilla bugs, 
       your account should be migrated to JIRA. In this case, do not create a new account, 
       but use the same e-mail account name and click on "Forgot Password" on the JIRA home page.
     </note>
  </p>
</s2>
</s1>
