开发者

Blackberry: Java app calling webservice through blackberry enterprise server

I have an java app for blackberry, created with Java Plug-in for Eclipse. I want to invoke a webservice on a webserver through Blackberry mds. The code I am using works, but is not stabile. Meaning that I get successfully get in contact with web server 100 times in a row, but after a while, the connection is broken. The log files from Blackberry are many and not easy to read, but at least I a feel that the phrase "Invalid socket" is not good for me.

I am using StreamConnection class in my code, but I see from some sample code that httpConnection is used instead. Anyone know when to use HttpConnection instead of StreamConnection?

I paste my code here. Perhaps some of you see anything I should have done different:

private boolean sendStatusMessage(String phoneNumber, String status) {
        StreamConnection conn = null;
        OutputStream output = null; //mari added        

        try {
            String body = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:i3w=\"http://I3WebAction\">"
                    + "<soapenv:Header/>"
                    + "<soapenv:Body>"
                    + "<i3w:I3SetMobileStatus><i3w:p_Status>"
                    + status
                    + "</i3w:p_Status><i3w:p_PhoneNumber>"
                    + phoneNumber
                    + "</i3w:p_PhoneNumber>"
                    + "</i3w:I3SetMobileStatus></soapenv:Body></soapenv:Envelope>";

            String URL = "socket://" + soapServer + ":" + port
                    + ";deviceside=false";
            conn = (StreamConnection) Connector.open(URL);

            //OutputStream output = conn.openOutputStream();
            output = conn.openOutputStream();           

            OutputStreamWriter writer = new OutputStreamWriter(output);
            writer.write("POST /SOAPListener/I3SOAPISAPIU.dll HTTP/1.1\r\n");
            writer.write("Accept-Encoding: gzip,deflate\r\n");
            writer.write("Content-Type: text/xml;charset=UTF-8\r\n");
            writer.write("SOAPAction: \"http://I3WebAction/I3SetMobileStatus\"\r\n");
            writer.write("User-Agent: Jakarta Commons-HttpClient/3.1\r\n");
            writer.write("Host: lvkdb01\r\n");
            writer.write("Content-Length: " + body.length() + "\r\n");
            writer.write("\r\n");
            writer.write(body);

            writer.flush();
            writer.close(); //mari added

        } catch (Exception e) {
            Dialog.alert(e.getMessage());
            return false;
        } finally {
            try {
                // Close stream regardless of exceptions and return-points
                output.close();
            } catch (IOException e) {
                // If closing the stream causes exception, the stream is most
                // likely not open or available. We display an error message,
                // and continues the program.
                Dialog.alert(e.getMessage());
                return false;
            }
            try {
                // Close stream regardless of exceptions and r开发者_Python百科eturn-points
                conn.close();
            } catch (IOException e) {
                // If closing the stream causes exception, the stream is most
                // likely not open or available. We display an error message,
                // and continues the program.
                Dialog.alert(e.getMessage());
                return false;
            }
        }
        return true;
    }

I appreciate any comments or ideas on why this code is not running stabile.


By default all requests through BES are transcoded. Try to turn off transcoding and see if that resolves your issue. To turn off transcoding you would need to pass the below header.

Turn off MD transcoding: ("x-rim-transcode-content", "none) as a header

MDS logs would be useful(default location c:\Program Files\Research In Motion\BlackBerryEnterprise Server\Logs)/ They end with “MDAT”. The logging level can be changed by following these instructions. http://docs.blackberry.com/en/admin/deliverables/14334/Change_logging_level_for_MDSCS_552126_11.jsp

You may also way to enable Verbose HTTP logging for testing, found here, which can help trace through the http messages. http://docs.blackberry.com/en/admin/deliverables/14334/Change_activities_MDSCS_writes_to_log_827932_11.jsp

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜