Member 12600625 Ответов: 0

Оценка экспрессивности кода на основе SOAP и REST


В настоящее время я занимаюсь проектом для своей магистерской диссертации и должен оценить стандарты веб-сервисов для приложений Web of Things (система мониторинга пациентов в реальном времени)

Ниже приведены коды, которые я написал в soap и rest, в которых происходит связь между Android-приложением и веб-серверами.Код предназначен для отправки и получения сведений о пациенте.


1. Отправка SOAP-запрос к серверу и получать ответ в формате XML (мыло приложение для Android )

Document get_patient(){

    String NAMESPACE = PRESET_NAMESPACE;
    String URL = PRESET_URL;
    String SOAP_ACTION = PRESET_SOAP_ACTION+"/api/get_Patient_List";
    String METHOD_NAME = "get_Patient_List";


    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("hospital_name", Hospital_Name);

    SoapSerializationEnvelope envelope =
            new SoapSerializationEnvelope(SoapEnvelope.VER11);

    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
        String resp= String .valueOf(envelope.getResponse());
        Document doc=convertStringToDocument(resp);
        return doc;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

private static Document convertStringToDocument(String xmlStr) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder;
    try
    {
        builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new InputSource(new StringReader(xmlStr)));
        return doc;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}


ArrayList<String> PatientName;
ArrayList<String> PatientCond;
ArrayList<String> AmbulanceId;
ArrayList<String> PatientId;

boolean showNotification=false;

void Check()
{
    final Document doc = get_patient();
    PatientName=new ArrayList<>();
    PatientId=new ArrayList<>();
    PatientCond=new ArrayList<>();
    AmbulanceId=new ArrayList<>();
    dhp.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            String result="null";
            try{
                result =doc.getElementsByTagName("status").item(0).getChildNodes().item(0).getNodeValue();
            }catch(Exception e){
                e.printStackTrace();
            }
            if (result.equals("true")) {

                int count =Integer.parseInt(doc.getElementsByTagName("count").item(0).getChildNodes().item(0).getNodeValue());
                showNotification=false;
                if(count>0)
                {

                    for(int i=0;i<count;i++)
                    {
                        AmbulanceId.add(String.valueOf(doc.getElementsByTagName("Patient_" + i).item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue()));
                        PatientName.add(String.valueOf(doc.getElementsByTagName("Patient_" + i).item(0).getChildNodes().item(2).getChildNodes().item(0).getNodeValue()));
                        PatientCond.add(String.valueOf(doc.getElementsByTagName("Patient_" + i).item(0).getChildNodes().item(6).getChildNodes().item(0).getNodeValue()));
                        String ppid=String.valueOf(doc.getElementsByTagName("Patient_" + i).item(0).getChildNodes().item(3).getChildNodes().item(0).getNodeValue());
                        PatientId.add(ppid);

                        if(!al.contains(ppid)){
                            al.add(ppid);
                            showNotification=true;
                        }
                    }
                    ListView lv=(ListView) dhp.findViewById(R.id.DoctorlistView);

                    lv.setAdapter(new Doctor_Patient_List_CustomAdapter(dhp, PatientName, PatientCond, AmbulanceId, PatientId, type_of_user, hospital_name, uname, convertDocumentToString(doc)));
                }
            }else if(result.equals("false"))
            {
                ListView lv=(ListView) dhp.findViewById(R.id.DoctorlistView);
                lv.setAdapter(null);
            }


        }
    });


}


2. Получение SOAP-запроса и отправка XML-ответа (SOAP-сервер)


@WebMethod
public String get_Patient_List(@WebParam(name = "hospital_name") String hospital_name) {

    MongoCollection<org.bson.Document> collection = db.getCollection("patient_details");
    try {
        DocumentBuilderFactory icFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder icBuilder;
        icBuilder = icFactory.newDocumentBuilder();
        doc1 = icBuilder.newDocument();

        final Element mainRootElement = doc1.createElement("Response");
        doc1.appendChild(mainRootElement);

        FindIterable<org.bson.Document> iterable = collection.find(new org.bson.Document("hospital_name", hospital_name).append("is_enabled", "Yes"));

        datafound = false;
        count=0;
        iterable.forEach(new Block<org.bson.Document>() {
            @Override
            public void apply(final org.bson.Document document) {

                datafound = true;

                Element PatientElement = doc1.createElement("Patient_"+count);
                mainRootElement.appendChild(PatientElement);

                Element node = doc1.createElement("hospital_name");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("hospital_name"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("ambulance_id");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("ambulance_id"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("p_name");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("p_name"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("p_id");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("p_id"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("gender");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("gender"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("blood_grp");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("blood_grp"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("condition");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("condition"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("problem");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("problem"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("police_case");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("police_case"))));
                PatientElement.appendChild(node);

                node = doc1.createElement("is_enabled");
                node.appendChild(doc1.createTextNode(String.valueOf(document.get("is_enabled"))));
                PatientElement.appendChild(node);
                count++;

            }
        });


        if (datafound == true) {
            Element node = doc1.createElement("status");
            node.appendChild(doc1.createTextNode("true"));
            mainRootElement.appendChild(node);
            Element node1 = doc1.createElement("count");
            node1.appendChild(doc1.createTextNode(String.valueOf(count)));
            mainRootElement.appendChild(node1);
            return convertDocumentToString(doc1);
        }

        Element node = doc1.createElement("status");
        node.appendChild(doc1.createTextNode("false"));
        mainRootElement.appendChild(node);
        return convertDocumentToString(doc1);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "null";
}



3. Отправка запросу отдых на сервер и получать ответ в формате JSON (остальные приложения андроид )

JSONObject response1=null;
JSONObject get_patient(){

    RequestParams rp = new RequestParams();

    rp.add("hospital_name", Hospital_Name);

    response1=null;

    HttpUtils.get("/Patient/get_Patient_List", rp, new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            response1=response;

        }

        @Override
        public void onFailure(int statusCode,
                              cz.msebera.android.httpclient.Header[] headers,
                              java.lang.Throwable throwable,
                              org.json.JSONObject errorResponse) {
            System.out.println("failed");
        }
    });

    return response1;
}

ArrayList<String> PatientName;
ArrayList<String> PatientCond;
ArrayList<String> AmbulanceId;
ArrayList<String> PatientId;

boolean showNotification=false;

void Check()
{
    final JSONObject doc = get_patient();
    PatientName=new ArrayList<>();
    PatientId=new ArrayList<>();
    PatientCond=new ArrayList<>();
    AmbulanceId=new ArrayList<>();
    dhp.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            try {
                String result = "null";
                try {
                    result = String.valueOf(doc.get("status"));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (result.equals("true")) {
                    int count = Integer.parseInt(String.valueOf(doc.get("count")));
                    showNotification = false;
                    if (count > 0) {
                        for (int i = 0; i < count; i++) {
                            JSONObject jo=new JSONObject(String.valueOf(doc.getJSONArray("Patient_" + i).get(0)));
                            AmbulanceId.add(String.valueOf(jo.get("ambulance_id")));
                            PatientName.add(String.valueOf(jo.get("p_name")));
                            PatientCond.add(String.valueOf(jo.get("condition")));
                            String ppid = String.valueOf(jo.get("p_id"));
                            PatientId.add(ppid);

                            if (!al.contains(ppid)) {
                                al.add(ppid);
                                showNotification = true;
                            }
                        }
                        ListView lv = (ListView) dhp.findViewById(R.id.DoctorlistView);

                        lv.setAdapter(new Doctor_Patient_List_CustomAdapter(dhp, PatientName, PatientCond, AmbulanceId, PatientId, type_of_user, hospital_name, uname, String.valueOf(doc)));
                    }
                } else if (result.equals("false")) {
                    ListView lv = (ListView) dhp.findViewById(R.id.DoctorlistView);
                    lv.setAdapter(null);
                }
            } catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    });
}}



4. Получение запроса и отправка ответа JSON отдыха (REST сервера )



@GET
@Path("/get_Patient_List")
@Produces("application/json")
public String get_Patient_List(@QueryParam("hospital_name") String hospital_name) {
    obj = new JSONObject();
    try {
        FindIterable<org.bson.Document> iterable = collection.find(new org.bson.Document("hospital_name", hospital_name).append("is_enabled", "Yes"));
        datafound = false;
        count=0;
        iterable.forEach(new Block<org.bson.Document>() {
            @Override
            public void apply(final org.bson.Document document) {

                ja = new JSONArray();
                JSONObject jo = new JSONObject();

                datafound = true;
                jo.put("hospital_name", String.valueOf(document.get("hospital_name")));
                jo.put("ambulance_id", String.valueOf(document.get("ambulance_id")));
                jo.put("p_name", String.valueOf(document.get("p_name")));
                jo.put("p_id", String.valueOf(document.get("p_id")));
                jo.put("gender", String.valueOf(document.get("gender")));
                jo.put("blood_grp", String.valueOf(document.get("blood_grp")));
                jo.put("condition", String.valueOf(document.get("condition")));
                jo.put("problem", String.valueOf(document.get("problem")));
                jo.put("police_case", String.valueOf(document.get("police_case")));
                jo.put("is_enabled", String.valueOf(document.get("is_enabled")));
                ja.put(jo);
                obj.put("Patient_"+count, ja);
                count++;
            }
        });

        if (datafound == true) {
            obj.put("status", "true");
            obj.put("count", count);
            return String.valueOf(obj);
        }

        obj.put("status", "false");
        return String.valueOf(obj);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "null";
}}



Мне нужна оценка для этого кода на основе этих пунктов:-

1. Какой код (SOAP или REST) более выразителен, то есть обеспечивает лучшее решение в Ясной, естественной и лаконичной форме?


2. Какой код проще использовать и понимать ?



Что я уже пробовал:

Я оценил этот код со своей стороны, но мне также нужно знать мнение других о коде, так как мне нужно включить опрос в свою диссертацию.

0 Ответов