tablica bajtów -> string, nietypowo + problem z SAAJ

0

Witam,

Pierwsza sprawa przedstawia się tak:
Jest serwer SOAP, w odpowiedzi w pliku XML w treści otrzymuję ciąg:

IyBCbGVuZGVyM0QgTVRMIEZpbGU6IGFybWNoYWlyX2FuZF90YWJsZS5ibGVuZAojIE1hdGVyaWFsIENvdW50OiA2Cm5ld210bCBtZ
XRhbGwKTnMgNTAuOTgwMzkyCkthIDAuMDAwMDAwIDAuMDAwMDAwIDAuMDAwMDAwCktkIDAuMTY4MTI0IDAuMTY4MTI0IDAuMTY4MT
I0CktzIDEuNjIzODg3IDEuNjIzODg3IDEuNjIzODg3Ck5pIDEuMDAwMDAwCmQgMS4wMDAwMDAKaWxsdW0gMgoKCm5ld210bCBzaWxsb25fc
mVmCk5zIDM1LjI5NDExOApLYSAwLjAwMDAwMCAwLjAwMDAwMCAwLjAwMDAwMApLZCAwLjExMDkwMCAwLjEzOTc2NSAwLjIxNDAyOApL
cyAwLjcwNzAzMiAwLjcwNzAzMiAwLjcwNzAzMgpOaSAxLjAwMDAwMApkIDEuMDAwMDAwCmlsbHVtIDIKCgpuZXdtdGwgZnVzdGFwaWphC
k5zIDk2LjA3ODQzMQpLYSAwLjAwMDAwMCAwLjAwMDAwMCAwLjAwMDAwMApLZCAwLjY0MDAwMCAwLjY0MDAwMCAwLjY0MDAwMApLc
yAwLjUwMDAwMCAwLjUwMDAwMCAwLjUwMDAwMApOaSAxLjAwMDAwMApkIDEuMDAwMDAwCmlsbHVtIDIKbWFwX0tkIGZ1c3RhcGlqYV9
0aWxlYWJsZS5qcGcKCgpuZXdtdGwgbWV0YWxsLjAwMQpOcyA5Ni4wNzg0MzEKS2EgMC4wMDAwMDAgMC4wMDAwMDAgMC4wMDAwMD
AKS2QgMC4wNjMxOTkgMC4wNjMxOTkgMC4wNjMxOTkKS3MgMS4wOTE1MTkgMS4wOTE1MTkgMS4wOTE1MTkKTmkgMS4wMDAwMDAK
ZCAxLjAwMDAwMAppbGx1bSAyCgoKbmV3bXRsIG1lc2FpbnRyb19saXR0bGVfc3RvbmVzLmpwZwpOcyA5Ni4wNzg0MzEKS2EgMC4wMDAw
MDAgMC4wMDAwMDAgMC4wMDAwMDAKS2QgMC44MDAwMDAgMC44MDAwMDAgMC44MDAwMDAKS3MgMC41MDAwMDAgMC41MDAwM
DAgMC41MDAwMDAKTmkgMS4wMDAwMDAKZCAxLjAwMDAwMAppbGx1bSAyCm1hcF9LZCBsaXR0bGVfc3RvbmVzLmpwZwoKCm5ld210bC
BuZWdyZXBvdGVzCk5zIDUwLjk4MDM5MgpLYSAwLjAwMDAwMCAwLjAwMDAwMCAwLjAwMDAwMApLZCAwLjE2ODEyNCAwLjE2ODEyNCA
wLjE2ODEyNApLcyAxLjYyMzg4NyAxLjYyMzg4NyAxLjYyMzg4NwpOaSAxLjAwMDAwMApkIDEuMDAwMDAwCmlsbHVtIDIKCgo=

Jest to plik przechowywany w bazie na serwerze jako tablica bajtów, wszystko spoko, tylko, że to jest plik mtl, czyli opisujący materiały pokrywające obiekty 3d, cały myk polega na tym, że te pliki wyglądają normalnie tak:

# Blender3D MTL File: bed1.blend
# Material Count: 2
newmtl fusta_llit
Ns 37.254902
Ka 0.000000 0.000000 0.000000
Kd 0.782138 0.616779 0.418346
Ks 0.266098 0.266098 0.266098Ni 1.000000
d 1.000000
illum 2
map_Kd rojiza.jpg


newmtl sobrecolchon_patron1.jpg.001
Ns 0.000000
Ka 0.000000 0.000000 0.000000
Kd 0.649339 0.649413 0.593899
Ks 0.236860 0.236860 0.236860
Ni 1.000000
d 1.000000
illum 2
map_Kd patron1.jpg

i problem polega na tym, ze muszę przekonwertować pierwszy string do tablicy bajtów i z powrotem do stringu tak by otrzymać coś co będzie miało jakiś sens.

Druga sprawa:

Serwer SOAP, odpowiedź serwera na zapytanie wygląda tak:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:method="http://tempuri.org" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:sql="http://schemas.microsoft.com/sqlserver/2004/SOAP" xmlns:sqlmessage="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlMessage" xmlns:sqlresultstream="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlResultStream" xmlns:sqlrowcount="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlRowCount" xmlns:sqlsoaptypes="http://schemas.microsoft.com/sqlserver/2004/SOAP/types" xmlns:sqltransaction="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlTransaction" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:space="preserve">
<SOAP-ENV:Body>
<method:GetObject3D_filesResponse>
<method:GetObject3D_filesResult>
<sqlresultstream:SqlXml xsi:type="sqlsoaptypes:SqlXml">
<SqlXml>
<objects>
<object object_id="17" object_name="stolik z fotelami z tekstura">
<mtl_file>tutaj tresc w dziwnym formacie j.w</mtl_file>
<obj_file>tutaj tresc w dziwnym formacie j.w</obj_file>
<texture_files>
<texture file_name="fustapija_tileable.jpg">tutaj tresc w dziwnym formacie j.w</texture>
<texture file_name="little_stones.jpg">tutaj tresc w dziwnym formacie j.w</texture>
</texture_files>
</object>
</objects>
</SqlXml>
</sqlresultstream:SqlXml>
<sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount">
<sqlrowcount:Count>1</sqlrowcount:Count>
</sqlresultstream:SqlRowCount>
<sqlresultstream:SqlResultCode xsi:type="sqlsoaptypes:SqlResultCode">0</sqlresultstream:SqlResultCode></method:GetObject3D_filesResult>
</method:GetObject3D_filesResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

I tak, korzystając z tego kodu co napisałem:

 SOAPMessage reply = connection.call(message, destination);
            
            
            SOAPBody soapBody = reply.getSOAPBody();
            
            Name bodyName = soapFactory.createName("GetObject3D_filesResponse");
            
            SOAPElement soapElement = (SOAPElement)reply.getSOAPBody().getChildElements().next();
            do{
            soapElement = (SOAPElement)soapElement.getChildElements().next();
            } while (!soapElement.getNodeName().equals("obj_file"));
            
            System.out.println(soapElement.getNodeName());
            
             
            
            try{
                // Create file 
                FileWriter fstream = new FileWriter("testtesttest.mtl");
                    BufferedWriter out = new BufferedWriter(fstream);
                out.write(soapElement.getFirstChild().getNodeValue());
                //Close the output stream
                out.close();
                }catch (Exception e){//Catch exception if any
                  System.err.println("Error: " + e.getMessage());
                }

mogę dostać się tylko do treści dziecka mtl_file, nie potrafię dostać się do obj_file czy do dzieci texture.
Może jest jakaś łatwiejszy sposób aby do tego sie dobrać?

0

Ten dziwny format nazywa sie Base64 -> po prostu sobie to zdekoduj.

0

Dzięki za odpowiedź. Tego się nie spodziewałem. A może ktoś podpowie coś z SAAJ, kod który będzie wyszukiwał odpowiedni node, bo mój jak wida ć idzie coraz głębiej po rozgałęzieniach a nie przegląda sblingów...

1 użytkowników online, w tym zalogowanych: 0, gości: 1