10/05/2013, 04:01
|
| | Fecha de Ingreso: julio-2008
Mensajes: 11
Antigüedad: 16 años, 6 meses Puntos: 0 | |
Respuesta: Guardar en fichero Entendido Fuzzylog. Se que es muy descarado y "tener morro", pero puedes traducirlo en código?
El actual código que tengo para leer el XML es este...Cómo sería el SonarBugs.java?
BugSaxSonarParser.java Cita: package example;
import java.util.List;
import java.util.Map;
import java.util.jar.Attributes;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.HashMap;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import com.sun.org.apache.xerces.internal.parsers.SAXPars er;
public class BugsSaxParserSonar extends DefaultHandler{
private static final String BUG_COLLECTION = "BugCollection";
private static final String BUG_INSTANCE = "BugInstance";
private static final String LONG_MESSAGE = "LongMessage";
...
private static final String PATH_PROP = "sourcepath";
private static final String LINE_PROP = "start";
private boolean inBugCollectionZone = false;
private boolean inBugInstanceZone = false;
private boolean inLongMessage = false;
...
private String message = null;
private String instanceId = null;
private List<String> sourcePath = new ArrayList<String>();
private List<String> sourceLine = new ArrayList<String>();
private Map<String, Object[]> bugs = new HashMap<String, Object[]>(1,1);
private Pattern folderPattern = null;
public BugsSaxParserSonar (String folderPatterString){
folderPattern = Pattern.compile(folderPatterString);
}
public void startElement (String uri, String localName, String qName, Attributes attributes) {
if(inBugCollectionZone){
if(inBugInstanceZone){
if(LONG_MESSAGE.equals(qName)){
inLongMessage = true;
}
else if(inClass == false && inMethod == false && inField == false) && SOURCE_LINE.equals(qName)){
inSourceLine = true;
sourcePath.add(attributes.getValue(PATH_PROP));
sourceLine.add(attributes.getValue(LINE_PROP));
}
}
else if(BUG_INSTANCE.equals(qName)){
instanceId = attributes.getValue(INSTANCE_HASH);
inBugInstanceZone = true;
}
}
else if (BUG_COLLECTION.equals(qName)){
inBugCollectionZone = true;
}
}
public void characters (char ch[], int start, int length) throws SAXException {
if(inBugCollectionZone){
if(inBugInstanceZone){
if(inLongMessage){
if(message == null){
message = "";
}
message += new String(ch, start, length);
}
}
}
}
public void endElement (String uri, String localName, String qName) {
if(inBugCollectionZone){
if(inBugInstanceZone){
if(LONG_MESSAGE.equals(qName)){
inLongMessage = false;
}
}
else if(BUG_INSTANCE.equals(qName)){
inBugInstanceZone = false;
bugs.put(instanceId, new Object[]{new ArrayList<String>(sourcePath), new ArrayList<String>(sourceLine), message});
clearBugsValues();
}
}
else if (BUG_COLLECTION.equals(qName)){
inBugCollectionZone = false;
}
}
private void clearBugsValues(){
inBugCollectionZone = false;
inBugInstanceZone = false;
inLongMessage = false;
...
}
public Map<String, Object[]> getBugs() {
return bugs;
}
public String getWorkingDirectory() {
return workingDirectory;
}
public void setWorkingDirectory(String workingDirectory) {
this.workingDirectory = workingDirectory;
}
public static void main(String[] args){
BugsSaxParserSonar rsp = new BugsSaxParserSonar("/?(DD|DS)/");
try{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("D:/tmp/findbugs-result.xml", rsp);
}catch(ParseConfigurationException e){
System.err.println("error de parseo en XML");
}catch(SAXException e2){
e2.printStackTrace();
System.err.println("error de sax : " + e2.getMessage());
}catch(Exception e3){
System.err.println("error de io : " + e3.getMessage());
}
for(String id : rsp.getBugs().keySet()){
Object[] bugsValues = rsp.getBugs().get(id);
List<String> paths = (List<String>)bugsValues[0];
List<String> lines = (List<String>)bugsValues[1];
System.out.println("id:" + id + " " + paths + " " + lines + " " + bugsValues[2]);
}
}
} |