Neste Post vou mostrar um codigo Java pronto que faz a transformação de um XML para um Json e em seguida vou mostrar como devemos exportar este projeto em um arquivo JAR para expor no OSB.
É importante entendermos neste processo como deve ser realizado o export do projeto pois para outros codigos Java devemos fazer de outras formas pois cada código pode existir uma particularidade no caso de dependências.
A exposição do serviço Rest no OSB será dividida em Partes conforme abaixo para que eu consiga detalhar ao máximo cada etapa, consulte o Link de cada uma para ver as demais Partes:
- Parte 1: Criando uma API Rest Parte 1: Criando uma API Rest
- Parte 2: Transformando Xml em Json Java
- Parte 3: Criando o Projeto no OSB
- Parte 4: Expondo o Proxy usando Java Callout
Abra o eclipse e crie um projeto java como abaixo clicando em Create a Java Project
Obs: No meu caso estou utilizando o Spring Tool Suite 4 que já aparece a opção de criar o projeto.
Em Project Name coloque XmlJson e em Use a project specific JRE você precisará usar a JDK 1.6 do Java pois este é um codigo Java antigo e irá compilar apenas nesta versão do JAVA, e em seguida clique em Finish.
Agora clique com o botão direito em cima de JRE System Livrary e clique em Properties.
Na caixa que abrir clique em Execution environment e em seguida na outra caixa clique em J2SE-1.4 e ao lado clique em jdk1.6.0_45 (ou a versão que você tiver da JDK 6) e em seguida clique em Apply and Close nas duas caixas que foram abertas.
Agora crie uma pasta chamada META-INF e dentro da pasta crie um arquivo chamado MANIFEST.MF para que fique conforme abaixo:
Adicione o conteúdo abaixo dentro deste arquivo:
Manifest-Version: 1.0
Class-Path: json-lib-2.4.jar
Agora dentro da pasta src crie a package br.com.uanscarvalho e crie a classe XmlJsonUtil. Abaixo veja como criar a classe.
Copie abaixo o codigo para que fique dentro da classe XmlJsonUtil
package br.com.uanscarvalho;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
public class XmlJsonUtil {
public static String xmlToJson(XmlObject xmlObject) throws Exception {
String xml = xmlObject.toString();
System.out.println(xml);
XMLSerializer ser = new XMLSerializer();
JSONObject json = (JSONObject) ser.read(xml);
System.out.println(json);
return json.toString();
}
public static String xmlToJsonArray(XmlObject xmlObject) throws Exception {
String xml = xmlObject.toString();
System.out.println(xml);
XMLSerializer ser = new XMLSerializer();
JSONArray json = (JSONArray) ser.read(xml);
System.out.println(json);
return json.toString();
}
public static XmlObject jsonToXml(String json) throws Exception {
if (json == null || json.trim().length() == 0) {
return null;
}
XMLSerializer ser = new XMLSerializer();
String xml = "";
if (json.startsWith("{")) {
JSONObject jsonObject = JSONObject.fromObject(json);
xml = ser.write(jsonObject);
} else {
JSONArray jsonArray = JSONArray.fromObject(json);
xml = ser.write(jsonArray);
}
return XmlObject.Factory.parse(xml);
}
public static XmlObject jsonToGenericXml(String json) throws Exception {
if (json == null || json.trim().length() == 0) {
return null;
}
JSONObject jsonObject = JSONObject.fromObject(json);
JSONArray jsonArray = jsonObject.getJSONArray("Documents");
if (jsonArray == null || jsonArray.size() == 0) {
return null;
}
JSONObject root = (JSONObject) jsonArray.get(0);
String xml = "<jsonToXml><e></e></jsonToXml>";
XmlObject xmlObject = XmlObject.Factory.parse(xml);
XmlCursor xmlCursor = xmlObject.newCursor();
xmlCursor.toChild("jsonToXml");
xmlCursor.toChild("e");
Set entrySet = root.entrySet();
for (Iterator iter = entrySet.iterator(); iter.hasNext();) {
Map.Entry element = (Map.Entry) iter.next();
Object value = element.getValue();
String valueAsString = "";
if (value == null) {
valueAsString = "";
} else {
valueAsString = value.toString();
}
if (value.equals("null")) {
xmlCursor.insertElement((String) element.getKey());
} else {
xmlCursor.insertElementWithText((String) element.getKey(),
valueAsString);
}
}
return xmlObject;
}
public static void main(String[] args) throws Exception {
String json = "[{" +
"\"verificador\":\"1\","+
"\"tipo\":\"total\","+
"\"valor_pago\":\"18.00\","+
"\"data_pagamento\":\"2020-02-01\","+
"\"data_transacao\":\"2020-02-02\"}," +
"{"+
"\"verificador\":\"2\","+
"\"tipo\":\"parcial\","+
"\"valor_pago\":\"30.00\","+
"\"data_pagamento\":\"2020-02-18\","+
"\"data_transacao\":\"2020-02-19\"}]";
XmlObject xml = XmlJsonUtil.jsonToXml( json );
System.out.println( xml.toString() );
String jsonResult = XmlJsonUtil.xmlToJsonArray( xml );
System.out.println( jsonResult );
}
}
Veja que o codigo realmente ficou todo quebrado pois precisamos agora adicionar as libs necessárias que são nossas dependencias.
Faça o download das libs necessarias que estão no meu gitHub e em seguida baixe para algum local da sua maquina. Abaixo veja que no meu caso ficou em C:\libs
Vá novamente para o eclipse e com o botao direito clique em cima do seu projeto XmlJson e clique novamente em Properties.
Então ira aparecer a tela abaixo, ao lado esquerdo clique em Java Build Path em seguida clique na aba Libraries e depois clique em Add Exernal Jar
Agora vá na pasta onde estão suas libs, selecione todas e clique em abrir:
Na tela seguinte veja como deverá ficar, então clique em Apply and Close
Tudo Ok, caso queira fazer um teste com a classe XmlJsonUtil, basta apenas clicar com o botão direto em cima da classe e em seguida Run As –> Java Application
Vamos agora exportar o projeto para ser usado no OSB, para isso clique com o botão direito em cima do projeto e clique em Export
Selecione JAR file conforme abaixo e clique em Next
Em JAR file conforme abaixo selecione onde você ira salvar o arquivo e o nome. No meu caso vou salvar em C:\libs com o nome xmlJson.jar e em seguida clique em Next
Na tela seguinte selecione as duas opções de Export e em seguida clique em Next
Na próxima tela clique em Use existing manifest from workspace, em seguida selecione o arquivo MANIFEST.MF conforme abaixo e clique em OK
Então na tela abaixo clique em Finish e nosso arquivo JAR estará pronto para ser utilizado no OSB para fazer a transformação de um XML para um JSON e vice versa.
Clique abaixo para fazer o download no meu GitHub de todas as libs necessárias para colocarmos no OSB, principalmente a lib que acabamos de criar.
https://github.com/uanscarvalho/ProjetoXmlJsonOSB.git
Abraços e até a Próxima
/:-D