Friday, December 9, 2011

Reading a properties file, in an Axis2 web service, from the file system...

For those with some experience with Axis2 web services, you know that the axis2 application gets installed, as all Tomcat applications, in the <TOMCAT_ROOT>/webapps directory.

The axis2 app itself has a WEB-INF sub-directory, which itself contains these :

- classes
- conf
- lib
- modules
- services

I've been coding a few web services lately which use some java libraries (jars). I've found that the easiest way for the web services to get access to those libraries is to install all these jars in the WEB-INF/lib directory.

I then came to this requirement : one of the classes in one of the libraries needed to get its configuration information from a Properties file.

When I was coding within the Eclipse environment, that was easy enough, I just put the configuration file in my Eclipse project's root, and then used the following code :

String filename = "config.properties";
Properties props = new Properties();
props.load(new FileInputStream(filename));

Nothing new here, and it worked like a charm.

The problems started when I packaged that class into a library, and tried to use it from some web service installed in Axis2. The file couldn't be found anymore, or, more precisely, I had no idea where to put the file.

Note that I didn't want to put the file within the AAR archive : I wanted the file to be outside the web service's archive because I wanted to configure the application from a text file that could be easily changed with a text editor directly on the target server. I wanted to avoid having to rebuild the archive everytime I wanted to install somewhere where I needed different properties.

It turns out that all that's needed is this :

- put your properties file in the WEB-INF/classes directory or your Axis2 installation, or to be more precise, in <TOMCAT_ROOT>/webapps/axis2/WEB-INF/classes
- in your code, use this.getClass().getResourceAsStream(), like this :

String filename = "config.properties";
Properties props = new Properties();
InputStream isr = this.getClass().getResourceAsStream("/"+filename);
if (isr != null){
  InputStreamReader isrProperties = new InputStreamReader(isr);
  props.load(isrProperties); 
}

Did you notice the "/" in front of the filename on the third line ?

This means look in the root of the classpath. And the root of the classpath, in an Axis2 web service environment, is <TOMCAT_ROOT>/webapps/axis2/WEB-INF/classes.

Hope this helps.

Monday, August 15, 2011

Getting a Canadian iPhone to work with an AT&T GoPhone SIM card, Conclusion

Back from vacation in Virginia Beach, and I thought I'd let all know that the AT&T SIM card I put in my Canadian iPhone 3G has worked flawlessly for the complete duration of my trip.

I had read on different sites that AT&T might deactivate the SIM, supposedly because they could detect that my phone was canadian, but no such thing happened.

So, I definitely recommend using the GoPhone SIM card in the iPhone 3G. As for the iPhone 4, it doesn't work as far as I can tell.

Friday, August 5, 2011

Getting a Canadian iPhone to work with an AT&T GoPhone SIM card, Part 5

Well, I'm now on highway 87 driving down to VA beach, and although coverage is spotty at best, I can now confirm that the GoPhone SIM card works in my jailbroken and unlocked iPhone 3G.

Thursday, August 4, 2011

Getting a Canadian iPhone to work with an AT&T GoPhone SIM card, Part 4

Yesterday, I tried to get my old iPhone 3G to work with the GoPhone SIM.

The challenge was to jailbreak the phone, as it's not compatible with jailbreakme.com. After a few trials and errors, I finally succeeded jailbreaking it with redsn0w, although it seems that since I was on iOS 4.2.1, there's now no way to bring it back to "factory settings" as far as the baseband is concerned : I'm stuck with the iPad baseband (6.xx), which is required for the unlocking to work. I of course then unlocked the phone with ultrasn0w.

Had I known that I was going to use my 3G phone instead of my new iPhone 4, I wouldn't have cut the SIM into a MicroSIM. But the damage was done, and so I had to come up with a quick fix for that. I just took an old satellite access card and cut a regular SIM out of it, and then cut the inside of that so that I could fit my GoPhone MicroSIM in it, and voilĂ , I had my MicroSIM-to-SIM adapter.

I then proceeded to insert them in my iPhone 3G, and the result is encouraging : no "SIM failure" message, just the phone working normally, but showing "Network unavailable" in the top-left.

We'll know tomorrow, when I'm in an AT&T tower range, whether the setup works or not.

Wednesday, August 3, 2011

Getting a Canadian iPhone to work with an AT&T GoPhone SIM card, Part 3

Quick update : I drove down to the US border last night to try the GoPhone SIM card in my iPhone 4 within range of an AT&T tower.

Turns out I'm getting the same behavior as I did at home in Montreal : I either get the "SIM failure" message, or if I put the phone in airplane mode and reboot, I then get one network bar and no connection to the AT&T network.

After further research this morning, I have found that the baseband used by my iPhone, 04.10.01, can not be unlocked by ultrasnow. I'm at version 4.3.3 of iOS by the way.

I'm looking right now at other avenues, namely :

- trying to install a custom iOS (with different baseband) onto my phone, I don't know if that's at all possible
- trying the SIM in my old iPhone 3G (I don't remember which iOS version / baseband it was on).

Sunday, July 24, 2011

Getting a Canadian iPhone to work with an AT&T GoPhone SIM card, Part 2

This was SIM-cutting day !

I took out my Rogers MicroSIM, and laid it next to the GoPhone SIM. Cutting was required on all four sides. There are plenty of Youtube videos that will show you exactly how to do it. I would probably recommend a MicroSIM cutter available on Ebay, but for those that don't have the patience of waiting for shipping, you can basically get it done with scissors.

The name of the game here is : apply yourself. You are better off cutting less than needed at first, and then cutting hair-thin layers until you get the exact cut that is required. I found that aligning both chips along one side of my iPhone was a good way to make sure that my cuts were ok.

Once you're done, put both MicroSIMs on top of each other and make sure they are the same size. My Rogers SIM had its corners a bit rounded off, so I did the same to the GoPhone SIM.

The next step is to change your APN settings on your phone. Open up this post in your iPhone and click on the link. You'll get an easy-to-use iPhone app that lets you choose your provider, and will create a Profile in your General settings.

I made sure my 3G data was off before I inserted the SIM. I'm pretty sure that's useless, as I've read that there's no roaming available in Canada for GoPhone SIMs, but I didn't want to risk it anyway.

Finally, I inserted the AT&T MicroSIM in the tray, put the tray back into the iPhone.

If you are within reach of an AT&T cell tower, I imagine that the AT&T network would show up on the screen. My problem is that I'm doing all this in Montreal, and I'd have to drive to probably 5 km of the border to get some kind of AT&T signal.

My experience so far is that I'm getting a SIM failure popup right after I insert the MicroSIM.

My first conclusion was that either I have a bad SIM, or I cut it wrong. I haven't ruled out the bad SIM, but the bad cutting just doesn't make sense. When you look at the contacts, it's not as if having a contact point that's half a millimeter to either side would have any effect : each contact is at least 2-3 millimeters wide.

I googled a bit on the SIM failure thing. Some people talk about rebooting, others specify putting the phone in airplane mode before rebooting, which is what I did. Once rebooted, I turned off airplane mode, and I didn't get the SIM failure message. Then again, I don't get any network showing up on the screen, and there's only one bar showing.

I guess I'll have to drive down close to the border to really see if I've got a working SIM or not. I'll probably do that within the next 10 days or so.

Stay tuned...

Saturday, July 23, 2011

Getting a Canadian iPhone to work with an AT&T GoPhone SIM card

First I want to mention that this post on Cocoanetics.com was what started it all for me...

I'm planning my yearly vacation to Virginia Beach coming up in 2 weeks time, and I wanted a Data plan so that I could access the internet during the 13 hour drive down there.

There are a few sources of information for this project, and I wanted to share my own experience as of July 2011.

At the moment, I've found only one valid solution to having 3G data available in the US without paying the horrendous roaming data fee that Rogers (or any other carrier) charges : the GoPhone prepaid SIM card from AT&T.

If you're ok with Edge speed, then you could also go with Simple Mobile, which works on the T-Mobile network and thus only provides Edge data.

The first step is to get your hands on a GoPhone SIM card. If you search on Ebay, you'll see that there are SIM cards available from US sellers for anywhere from $5 to $10 shipped. As I was not willing to risk the SIM card not being shipped in time for my departure, I decided to drive down to Plattsburgh NY instead, which is about a 1-hour drive from where I live.

I first tried to get the SIM card at Walmart's, and then Radio-Shack, but they didn't sell the SIM card without an accompanying phone. I then went to the AT&T store on Smithfield road.

As I had read on a couple of sites beforehand, the staff first tried to convince me that the GoPhone SIM card wouldn't work in my iPhone. I told them politely that I looked it up and that I didn't expect them to support me in the process, and they agreed to sell me the SIM and a phone/text plan ($2/day unlimited, minimum purchase $15) as well as a Data plan ($25 for 500MB).

I then rode my car back to the canadian border, told the agent exactly what I had bought, and they let me through.

So I am back home, and later on this weekend I'll proceed with the next step, which will be to cut the SIM into a MicroSIM, then change the APN settings in the iPhone, and finally pop the SIM card in to test it, although I'll be in Canada... we'll see what happens.