<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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>
