Fórum ERRO JAXB Unmarshaller #474079
26/03/2014
0
Por favor pessoal, estou com o seguinte problema:
Para o meu arquivo XML de teste estou conseguindo fazer a leitura através do JAXB sem problemas. porém, quando vou testar com o arquivo da empresa em que trabalho, com exatamente as mesmas TAGS, sendo a unica diferença a 1ª linha do arquivo, acontece o erro:
javax.xml.bind.UnmarshalException: unexpected element (uri:"urn:infdiario", local:"DOC_ARQ"). Expected elements are <{}DOC_ARQ>,<{}urn:infdiario>
Meu XML de teste é este (que esta funcionando normalmente):
<?xml version="1.0" encoding="windows-1252" ?>
<DOC_ARQ xmlns:ns2="urn:infdiario">
<CAB_INFORM>
<COD_DOC>1</COD_DOC>
<DT_COMPT>05/03/2014</DT_COMPT>
<DT_GERAC_ARQ>06/03/2014</DT_GERAC_ARQ>
<VERSAO>1.0</VERSAO>
</CAB_INFORM>
<LISTA_INFORM>
<INFORM>
<CNPJ_FDO>Madhya Pradesh</CNPJ_FDO>
<VL_TOTAL>1000000</VL_TOTAL>
<VL_QUOTA>1,518340400000</VL_QUOTA>
<PATRIM_LIQ>70575048,39</PATRIM_LIQ>
<CAPTC_DIA>0,00</CAPTC_DIA>
<RESG_DIA>4445,08</RESG_DIA>
<VL_TOTAL_SAI>37405,68</VL_TOTAL_SAI>
<VL_TOTAL_ATV>70578285,13</VL_TOTAL_ATV>
<NR_COTST>50355</NR_COTST>
<LISTA_COTST_SIGNIF></LISTA_COTST_SIGNIF>
</INFORM>
para leitura do XML abaixo que esta dando problema. (a unica diferença é que o comando "ns2" do namespace não existe):
<?xml version="1.0" encoding="windows-1252" ?>
<DOC_ARQ xmlns="urn:infdiario">
<CAB_INFORM>
<COD_DOC>1</COD_DOC>
<DT_COMPT>05/03/2014</DT_COMPT>
<DT_GERAC_ARQ>06/03/2014</DT_GERAC_ARQ>
<VERSAO>1.0</VERSAO>
</CAB_INFORM>
<LISTA_INFORM>
<INFORM>
<CNPJ_FDO>Madhya Pradesh</CNPJ_FDO>
<VL_TOTAL>1000000</VL_TOTAL>
<VL_QUOTA>1,518340400000</VL_QUOTA>
<PATRIM_LIQ>70575048,39</PATRIM_LIQ>
<CAPTC_DIA>0,00</CAPTC_DIA>
<RESG_DIA>4445,08</RESG_DIA>
<VL_TOTAL_SAI>37405,68</VL_TOTAL_SAI>
<VL_TOTAL_ATV>70578285,13</VL_TOTAL_ATV>
<NR_COTST>50355</NR_COTST>
<LISTA_COTST_SIGNIF></LISTA_COTST_SIGNIF>
</INFORM>
Alguém pode por favor me ajudar com o problema em questão?
Obrigado!
Para o meu arquivo XML de teste estou conseguindo fazer a leitura através do JAXB sem problemas. porém, quando vou testar com o arquivo da empresa em que trabalho, com exatamente as mesmas TAGS, sendo a unica diferença a 1ª linha do arquivo, acontece o erro:
javax.xml.bind.UnmarshalException: unexpected element (uri:"urn:infdiario", local:"DOC_ARQ"). Expected elements are <{}DOC_ARQ>,<{}urn:infdiario>
Meu XML de teste é este (que esta funcionando normalmente):
<?xml version="1.0" encoding="windows-1252" ?>
<DOC_ARQ xmlns:ns2="urn:infdiario">
<CAB_INFORM>
<COD_DOC>1</COD_DOC>
<DT_COMPT>05/03/2014</DT_COMPT>
<DT_GERAC_ARQ>06/03/2014</DT_GERAC_ARQ>
<VERSAO>1.0</VERSAO>
</CAB_INFORM>
<LISTA_INFORM>
<INFORM>
<CNPJ_FDO>Madhya Pradesh</CNPJ_FDO>
<VL_TOTAL>1000000</VL_TOTAL>
<VL_QUOTA>1,518340400000</VL_QUOTA>
<PATRIM_LIQ>70575048,39</PATRIM_LIQ>
<CAPTC_DIA>0,00</CAPTC_DIA>
<RESG_DIA>4445,08</RESG_DIA>
<VL_TOTAL_SAI>37405,68</VL_TOTAL_SAI>
<VL_TOTAL_ATV>70578285,13</VL_TOTAL_ATV>
<NR_COTST>50355</NR_COTST>
<LISTA_COTST_SIGNIF></LISTA_COTST_SIGNIF>
</INFORM>
para leitura do XML abaixo que esta dando problema. (a unica diferença é que o comando "ns2" do namespace não existe):
<?xml version="1.0" encoding="windows-1252" ?>
<DOC_ARQ xmlns="urn:infdiario">
<CAB_INFORM>
<COD_DOC>1</COD_DOC>
<DT_COMPT>05/03/2014</DT_COMPT>
<DT_GERAC_ARQ>06/03/2014</DT_GERAC_ARQ>
<VERSAO>1.0</VERSAO>
</CAB_INFORM>
<LISTA_INFORM>
<INFORM>
<CNPJ_FDO>Madhya Pradesh</CNPJ_FDO>
<VL_TOTAL>1000000</VL_TOTAL>
<VL_QUOTA>1,518340400000</VL_QUOTA>
<PATRIM_LIQ>70575048,39</PATRIM_LIQ>
<CAPTC_DIA>0,00</CAPTC_DIA>
<RESG_DIA>4445,08</RESG_DIA>
<VL_TOTAL_SAI>37405,68</VL_TOTAL_SAI>
<VL_TOTAL_ATV>70578285,13</VL_TOTAL_ATV>
<NR_COTST>50355</NR_COTST>
<LISTA_COTST_SIGNIF></LISTA_COTST_SIGNIF>
</INFORM>
Alguém pode por favor me ajudar com o problema em questão?
Obrigado!
Rafael Albuquerque
Curtir tópico
+ 0
Responder
Posts
09/05/2014
Rafael Albuquerque
Boa tarde pessoal,
Como ninguém se manifestou sobre a solução do problema de leitura do arquivo xml com o JAXB, e já que agora encontrei uma maneira alternativa, segue abaixo a solução que acredito que vai ajudar quem necessite:
1) Na classe onde faço a leitura do meu arquivo (ou dos meus vários arquivos) faço a chamada para o método "convertXml"
for (int j=0; x < afile.length; x++) {
File arquivos = convertXml(afile[x]);
2) O Método "convertXml" abaixo utiliza o FileManipulator para realizar a leitura do arquivo xml, no mesmo
é criado um arquivo temporário contendo as informações do arquivo original já com a alteração necessária no arquivo (comando replace),
public static File convertXml(File file) throws IOException{
FileManipulator fileManipulator = new FileManipulator();
File temp = File.createTempFile(file.getName(), "");
List<String> lines = fileManipulator.getLines(file);
for(String str : lines){
fileManipulator.writeInFile(temp, str.replace("<DOC_ARQ xmlns", "<DOC_ARQ xmlns:ns2"));
}
temp.deleteOnExit();
return temp;
}
3) A classe abaixo é um leitor txt (FileManipulator)
public class FileManipulator {
public void writeNewFile(String filename, String line) throws IOException {
File file = new File(filename);
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(line);
bw.close();
}
public void writeNewFile(String filename, List<String> line)throws IOException {
File file = new File(filename);
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
int i = 0;
while (i <= line.size()) {
BufferedWriter bw = new BufferedWriter(fw);
bw.write(line.get(i));
bw.close();
i++;
}
}
public void writeInFile(File wfile, String line) throws IOException {
RandomAccessFile file = new RandomAccessFile(wfile, "rw");
file.seek(file.length());
file.writeBytes(line);
file.close();
}
public void writeInFile(File wfile, List<String> line) throws IOException {
RandomAccessFile file = new RandomAccessFile(wfile, "rw");
int i = 0;
while (i <= line.size()) {
file.seek(file.length());
file.writeBytes(line.get(i));
file.close();
i++;
}
}
public Boolean copyTo(File file, File destino) throws IOException {
return this.copyTo(file, destino.getAbsolutePath()+"/"+file.getName());
}
public Boolean copyTo(File file, String destino) throws IOException {
// destino = destino+"/"+file.getName();
File bfile = new File(destino);
FileInputStream inStream = new FileInputStream(file);
FileOutputStream outStream = new FileOutputStream(bfile);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
return Boolean.TRUE;
}
public List<String> getLines(File file) throws IOException {
List<String> lines = new ArrayList<String>();
FileInputStream fstream = new FileInputStream(file);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
lines.add(strLine);
}
br.close();
return lines;
}
public String getSring(File file) throws IOException {
String lines = "";
FileInputStream fstream = new FileInputStream(file);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
lines += strLine;
}
br.close();
return lines;
}
public File ConverteExcel(File excel) throws IOException, InterruptedException{
File fileNew = null;
File vbs = new File("C:\\vb_converte.vbs");
fileNew = new File(excel.getAbsolutePath().replace(".xlsx", ".xls"));
PrintWriter writer = new PrintWriter(vbs);
writer.println("Dim objExcel");
writer.println("Dim objWorkBook");
writer.println("Set objExcel = CreateObject(\"EXCEL.APPLICATION\")");
writer.println("objExcel.DisplayAlerts = False");
writer.println("Set objWorkBook = objExcel.Workbooks.Open(\""+ excel.getAbsoluteFile() +"\")");
writer.println("objWorkBook.SaveAs \""+ fileNew.getAbsoluteFile() + "\", 1");
writer.println("objWorkBook.Close True");
writer.println("Set objWorkBook = Nothing");
writer.println("Set objExcel = Nothing");
writer.close();
Runtime.getRuntime().exec("cmd.exe /c start " + "C:\\vb_converte.vbs");
int i = 0;
while(i<10&&fileNew.length()<=excel.length()){
Thread.sleep(1000);
i++;
}
vbs.deleteOnExit();
return fileNew;
}
public File ConverteWord(File word) throws IOException, InterruptedException{
File fileNew = null;
File vbs = new File("C:\\vb_converte.vbs");
fileNew = new File(word.getAbsolutePath().replace(".docx", ".doc"));
PrintWriter writer = new PrintWriter(vbs);
writer.println("Dim objWord");
writer.println("Dim objDOC");
writer.println("Set objWord = CreateObject(\"Word.Application\")");
writer.println("objWord.Visible = False");
writer.println("Set objDOC = objWord.Documents.Open(\""+ word.getAbsoluteFile() +"\")");
writer.println("objDOC.SaveAs \""+ fileNew.getAbsoluteFile() + "\", 1");
writer.println("objDOC.Close True");
writer.println("Set objDOC = Nothing");
writer.println("Set objWord = Nothing");
writer.close();
Runtime.getRuntime().exec("cmd.exe /c start " + "C:\\vb_converte.vbs");
int i = 0;
while(i<10&&fileNew.length()<=word.length()){
Thread.sleep(1000);
i++;
}
vbs.deleteOnExit();
return fileNew;
}
}
Como ninguém se manifestou sobre a solução do problema de leitura do arquivo xml com o JAXB, e já que agora encontrei uma maneira alternativa, segue abaixo a solução que acredito que vai ajudar quem necessite:
1) Na classe onde faço a leitura do meu arquivo (ou dos meus vários arquivos) faço a chamada para o método "convertXml"
for (int j=0; x < afile.length; x++) {
File arquivos = convertXml(afile[x]);
2) O Método "convertXml" abaixo utiliza o FileManipulator para realizar a leitura do arquivo xml, no mesmo
é criado um arquivo temporário contendo as informações do arquivo original já com a alteração necessária no arquivo (comando replace),
public static File convertXml(File file) throws IOException{
FileManipulator fileManipulator = new FileManipulator();
File temp = File.createTempFile(file.getName(), "");
List<String> lines = fileManipulator.getLines(file);
for(String str : lines){
fileManipulator.writeInFile(temp, str.replace("<DOC_ARQ xmlns", "<DOC_ARQ xmlns:ns2"));
}
temp.deleteOnExit();
return temp;
}
3) A classe abaixo é um leitor txt (FileManipulator)
public class FileManipulator {
public void writeNewFile(String filename, String line) throws IOException {
File file = new File(filename);
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(line);
bw.close();
}
public void writeNewFile(String filename, List<String> line)throws IOException {
File file = new File(filename);
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
int i = 0;
while (i <= line.size()) {
BufferedWriter bw = new BufferedWriter(fw);
bw.write(line.get(i));
bw.close();
i++;
}
}
public void writeInFile(File wfile, String line) throws IOException {
RandomAccessFile file = new RandomAccessFile(wfile, "rw");
file.seek(file.length());
file.writeBytes(line);
file.close();
}
public void writeInFile(File wfile, List<String> line) throws IOException {
RandomAccessFile file = new RandomAccessFile(wfile, "rw");
int i = 0;
while (i <= line.size()) {
file.seek(file.length());
file.writeBytes(line.get(i));
file.close();
i++;
}
}
public Boolean copyTo(File file, File destino) throws IOException {
return this.copyTo(file, destino.getAbsolutePath()+"/"+file.getName());
}
public Boolean copyTo(File file, String destino) throws IOException {
// destino = destino+"/"+file.getName();
File bfile = new File(destino);
FileInputStream inStream = new FileInputStream(file);
FileOutputStream outStream = new FileOutputStream(bfile);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
return Boolean.TRUE;
}
public List<String> getLines(File file) throws IOException {
List<String> lines = new ArrayList<String>();
FileInputStream fstream = new FileInputStream(file);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
lines.add(strLine);
}
br.close();
return lines;
}
public String getSring(File file) throws IOException {
String lines = "";
FileInputStream fstream = new FileInputStream(file);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
lines += strLine;
}
br.close();
return lines;
}
public File ConverteExcel(File excel) throws IOException, InterruptedException{
File fileNew = null;
File vbs = new File("C:\\vb_converte.vbs");
fileNew = new File(excel.getAbsolutePath().replace(".xlsx", ".xls"));
PrintWriter writer = new PrintWriter(vbs);
writer.println("Dim objExcel");
writer.println("Dim objWorkBook");
writer.println("Set objExcel = CreateObject(\"EXCEL.APPLICATION\")");
writer.println("objExcel.DisplayAlerts = False");
writer.println("Set objWorkBook = objExcel.Workbooks.Open(\""+ excel.getAbsoluteFile() +"\")");
writer.println("objWorkBook.SaveAs \""+ fileNew.getAbsoluteFile() + "\", 1");
writer.println("objWorkBook.Close True");
writer.println("Set objWorkBook = Nothing");
writer.println("Set objExcel = Nothing");
writer.close();
Runtime.getRuntime().exec("cmd.exe /c start " + "C:\\vb_converte.vbs");
int i = 0;
while(i<10&&fileNew.length()<=excel.length()){
Thread.sleep(1000);
i++;
}
vbs.deleteOnExit();
return fileNew;
}
public File ConverteWord(File word) throws IOException, InterruptedException{
File fileNew = null;
File vbs = new File("C:\\vb_converte.vbs");
fileNew = new File(word.getAbsolutePath().replace(".docx", ".doc"));
PrintWriter writer = new PrintWriter(vbs);
writer.println("Dim objWord");
writer.println("Dim objDOC");
writer.println("Set objWord = CreateObject(\"Word.Application\")");
writer.println("objWord.Visible = False");
writer.println("Set objDOC = objWord.Documents.Open(\""+ word.getAbsoluteFile() +"\")");
writer.println("objDOC.SaveAs \""+ fileNew.getAbsoluteFile() + "\", 1");
writer.println("objDOC.Close True");
writer.println("Set objDOC = Nothing");
writer.println("Set objWord = Nothing");
writer.close();
Runtime.getRuntime().exec("cmd.exe /c start " + "C:\\vb_converte.vbs");
int i = 0;
while(i<10&&fileNew.length()<=word.length()){
Thread.sleep(1000);
i++;
}
vbs.deleteOnExit();
return fileNew;
}
}
Responder
Gostei + 0
10/05/2014
Carlos Proença
Olá rafael...
to meio ocupado esses tempos n tenho visto muito o forum.. qnd vj eh só um minuto hehe.
obrigado pela contribuição e parabeins por conseguir resolver ai...
att
to meio ocupado esses tempos n tenho visto muito o forum.. qnd vj eh só um minuto hehe.
obrigado pela contribuição e parabeins por conseguir resolver ai...
att
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)