簡體   English   中英

我的Java網絡服務返回了一個用html包裝的JSON字符串,如何刪除HTML

[英]My Java web Service returns a JSON String wrapped in html, how can i remove the HTML

我已經看到過類似的問題,但是在PHP和C#中,我的問題是我是java網絡服務的新手,我們正在使用GSON對結果進行序列化,結果在ArrayList中,我的問題是我的android代碼中的響應獲取了GSON,但包裝在HTML中,因此Gson()。fromJSon給出了錯誤。 我需要刪除HTML

這是我的代碼,請幫忙。

@WebService()
public class Oracle_conexion {

private static final String driver = "oracle.jdbc.driver.OracleDriver";
private static final String database = "jdbc:oracle:thin:@XXX.xxxx.XX:1521:XE";
private static final String usuario = "web";
private static final String password = "prueba";
private static String resultado;

@WebMethod(operationName = "getListaClientes")
public static String getListaClientes() throws SQLException {
    List<Cliente> listaClientes = new ArrayList<Cliente>();

    Connection conn = null;
    PreparedStatement preparedStatement = null;

    String query = "SELECT * FROM xxxx.CLIENTES";

    try {
        conn = conexionbd();
        preparedStatement = conn.prepareStatement(query);
        ResultSet rs = preparedStatement.executeQuery();

        // Recorre el cursor

        while (rs.next()) {

            Cliente cliente = new Cliente();
            cliente.setNombre(rs.getString("NOMBRE"));
            cliente.setCodCliente(rs.getInt("CODIGO"));
            cliente.setCodComp(rs.getString("ORG"));

            listaClientes.add(cliente);
        }// while

    } catch (SQLException e) {
        System.out.println(e.getMessage());
    } finally {

        if (preparedStatement != null)
            preparedStatement.close();

        if (conn != null)
            conn.close();
    }
    JsonArray jsonarray = null;
    String json = "";
    try {
        if (listaClientes != null) {
            // json = new Gson().toJson(listaClientes);
            /*
             * Gson g = new Gson(); Type type = new
             * TypeToken<ArrayList<Cliente>>(){}.getType(); json =
             * g.toJson(listaClientes, type);
             */

            Gson gson = new Gson();
            JsonElement element = gson.toJsonTree(listaClientes,
                    new TypeToken<List<Cliente>>() {
                    }.getType());

            jsonarray = element.getAsJsonArray();

            /*
             * JsonObject jo = new JsonObject(); jo.add("j", new
             * JsonArray());
             */
            // Gson gson = new GsonBuilder().create();
            // jsonarray = gson.toJsonTree(listaClientes).getAsJsonArray();
            // json = new Gson().toJson(listaClientes);
        }

    } catch (Exception e) {
        System.out.println(e.getCause().getMessage());
    }

    // return listaClientes.toString();
    return jsonarray.toString();
}

這是我的android代碼

public class CallSoap {

public String getListaCliente(){     
    //ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();
    String SOAP_ACTION = "http://oraclecon.com/getListaClientes";
    String OPERATION_NAME = "getListaClientes";
    String WSDL_TARGET_NAMESPACE = "http://oraclecon.com";

    String SOAP_ADDRESS="http://XXX.xxxx.XX:8088/OracleEclipWS/services/Oracle_conexion?wsdl";

    // Modelo el request
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

    envelope.dotNet = false;
    envelope.setOutputSoapObject(request);          


    String response=null;
    //Para acceder al WS se crea un objeto de tipo HttpTransportSE , esto es propio de la libreria KSoap        
    try {
        // Modelo el transporte
        HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
        //httpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        httpTransport.debug = true;

        //Llamado al servicio web . Son el nombre del SoapAction, que se encuentra en la documentacion del servicio web y el objeto envelope
        httpTransport.call(SOAP_ACTION, envelope);
        /*HttpClient hc = new DefaultHttpClient();
        HttpGet get = new HttpGet(SOAP_ADDRESS);
        HttpResponse rp = hc.execute(get);
        HttpEntity entity = rp.getEntity();
        response = rp.toString();*/         
        //Respuesta del Servicio web
        response = httpTransport.responseDump;

        /*for (int i=0;i<inpList.size();i++) {
          Cliente x = inpList.get(i);
          //System.out.println(x);
        }*/
         /*Gson gson = new GsonBuilder().create();
         TypeToken<List<Cliente>> token = new TypeToken<List<Cliente>>(){};
         List<Cliente> cli = gson.fromJson(response, token.getType());
         listaClientes = (ArrayList<Cliente>) cli;*/
    }catch (Exception ex){
        response=ex.getMessage();
    }

    return response;        
}

這是我在mainactivity中的測試應用程序中的異步代碼

public class MainActivity extends Activity {

public class AsyncCallSoapListaCli extends AsyncTask<String, Void, String> {
    // private final ProgressDialog dialog = new
    // ProgressDialog(MainActivity.this);

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        CallSoap CS = new CallSoap();
        String response = CS.getListaCliente();
        return response;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        Gson gson = new Gson();
        /*
         * Cliente[] listaCli = gson.fromJson(result, Cliente[].class);
         * List<Cliente> list = Arrays.asList(listaCli); list = new
         * ArrayList(list);
         */
        txtCodigo.setText(result);
        // dialog.dismiss();
        // ArrayList<Cliente> inpList = new ArrayList<Cliente>();
        // Type type = new TypeToken<ArrayList<Cliente>>(){}.getType();
        List<Cliente> inpList2 = (List<Cliente>) new Gson().fromJson(
                result, Cliente.class);

        /*
         * Gson gson = new GsonBuilder().create(); Map<String, Cliente>
         * gsonResponse; //TypeToken<List<Cliente>> token = new
         * TypeToken<List<Cliente>>(){}; Type collectionType = new
         * TypeToken<Map<String, Cliente>>(){}.getType(); gsonResponse =
         * gson.fromJson(result, collectionType); List<Cliente> cli =
         * gson.fromJson(result, collectionType); listCli =
         * (ArrayList<Cliente>) cli; textClientes.setText(result);
         */
        textClientes.setText(inpList2.get(0).getNombre());
    }
}

如果問題僅在於處理包裝在HTML中的GSON,則在發送到Gson()。fromJson()之前,您可以很好地處理響應字符串(除去HTML標簽)。 您可以制作一個實現** Html.TagHandler **接口的通用類,並在那里處理HTML標記,然后按以下方式使用它

txtCodigo.setText(Html.fromHtml(result, null, new MyTagHandler()));// where MyTagHandler implements Html.TagHandler

您可以參考本教程的實現。

嗯,您嘗試使用來自REST客戶端的SOAP服務。 客戶端和服務器都必須使用相同的技術。

對於移動設備,最好使用REST服務。

解決方案1在服務器端,您正在使用Oracle,因此以下教程可能對您有用。

解決方案2您可以在SOAP服務和REST客戶端之間建立橋梁。 為了簡單起見,您可以編寫一個Web應用程序,該應用程序使用Oracle的Web服務並生成REST服務。 例如,您可以通過Node Js和Loopback遵循本教程

jsut將此添加到您的代碼中:

response.getWriter().Write(new Gson().toJson(jsonarray));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM