Update to Visual Inheritance

After ‘writing off’ Visual Inheritance – I still found that I was stuck with it in my application – just so many things depended on it working.  I’m still annoyed about it being buggy and doing unexpected things – but I have come up with a list of things to do in order to keep VI ticking over – maybe you will find these useful too:

  • No abstract control types
  • No constructor arguments
  • Initialisation moved to Form_Load as opposed to the constructor
  • No controls nested in another windows control e.g. toolstrip.
  • Close all documents -> Clean -> Rebuild
  • Restart Visual Studio
Advertisements
Update to Visual Inheritance

Connecting to AGS to get IMap

Want to know how connect to your AGS server and get a handle on IMap of your published AGS map service.  The following code should give you the basic bare bones code that you need in order to do that – note stuff in “” should be applicable to your environment.

BTW – I find that getting a handle on IMap is useful in a great many ArcObjects based programming – so just thought I should post.

private String _host = "myServerName";
private String _username = "joebloggs";
private String _password = "password";
private String _domain = "myDomainName";
public void connectToServer()throws IOException
    {
        try {
            IServerContext serverContext = null;
            IServerConnection serverConnection = new ServerConnection();
            ServerInitializer serverInitializer = null;
            IServerObjectManager som = null;

            serverInitializer = new ServerInitializer();
            serverInitializer.initializeServer(_domain, _username, _password);
            serverConnection.connect(_host);
            som = serverConnection.getServerObjectManager();
            serverContext = som.createServerContext("publishedMapServiceName", "MapServer");

            IMapServer mapServer = (IMapServer) serverContext.getServerObject();
            IMapServerObjects mapServObjs = (IMapServerObjects) mapServer;

            IMap map = mapServObjs.getMap(mapServer.getDefaultMapName());

            serverContext.releaseContext();

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (AutomationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
Connecting to AGS to get IMap

Graphics Hint – Resizing Images

At some point we may find ourselves piddling around with images for creating splash screens, icons and web design.  Interesting little hint about what resizing algorithms you should use in your favourite graphics prog:

  • When REDUCING a big image to a small image use BICUBIC
  • When INCREASING a small image to a big image use BILINEAR

….I always forget this simple but useful information.

Graphics Hint – Resizing Images

A Simple SOAP Web Service Example in Eclipse (Ganymede)

Huh?  Not C#!!! – What’s all this “Rant in C Sharp” business then!?  Well, sometimes you have to be flexible in your job – well, lets just say we should be ‘language ambivalent’.

This is a VERY simple attempt to show show how to create a web service in Eclipse using Axis.  There is also some client code to show how you would interact with that web service.  For some reason I had to delve into a bazillion websites and scour a million books before I could make some sort of sense of it all – so just so you don’t have the same trouble – I have decided to publish it (well actually, it’s so that I don’t forget either).

Little disclaimer – I’m not saying that this is difinitive, I may be missing something, but it seems to work for me just now, and I haven’t gone into all the ‘bells and whistles’ of web services.  At the moment I’m writing down everything I learn and hopefully help others by sharing the knowledge.

(Using Java 1.5)

Create Basic Web Service

  1. Create new Dynamic Web Project.
  2. Create new Java class (call it “DoesMagic”).
  3. Add method like this (perhaps):
public class DoesMagic{
    public String doBasicStuff(String message)
    {
        return "This is your message: " + message;
    }
}

4. Right click on class you just made, New -> Other -> Web Services -> Web Service, you should get a form like the one below:

This will create all the necessary files to be able to publish your class as a web service.  If you want you can also create a client automatically by moving the slider – but what it generates may be hard to understand at first glance, so I have written a simple example of client code (see later on…).

5.  In order to run the web service – just,  Run as -> Run on Server.  Once the web service is running and alive on Tomcat – then we should be able to use it via some client code (see next bit).

Create Basic Web Service Client

Must create a project that has all the axis.jar type stuff in the WebContent folder – this can usually be made by generating a client application via the above wizard – you don’t have to use all the auto generated classes to access your web service, just do the following:

1.  Create a new Java Class – call it TestClient.

2.  Make it a main class, and enter the following code:


import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class TestClient {

public static void main(String [] args)
{
    try{
       String endpoint = "http://localhost:8080/TestWebService/services/DoesMagic";

       Service service = new Service();
       Call call = (Call) service.createCall();
       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
       call.setOperationName( new QName("http://testPackage.fc.com", "doBasicStuff") );

       String ret = (String) call.invoke( new Object[] {"Hello World"} );
       System.out.println(ret);
       }
       catch(Exception e){
           System.err.println(e.toString());
       }
}
}

3.  Go to your web service project you made before and look at the source code for the wsdl file that has been created.  It’s in the folder WebContent -> wsdl.  Inside there you will find a wsdl that is the same name as your class.

4. You need to look at the wsdl and find the endpoint – which looks similar to:

"http://localhost:8080/TestWebService/services/DoesMagic"

and you need to get the namespace and the method name you want to invoke  (as shown above, should be in a very similar format).

5. In this case, when we get to the point that the call.invoke command is being issued it is casting the result to a String and we are sending in a String called “Hello World” – this should create a message in the console like “This is your message: Hello World”.

6. To test the class, just run the project as a Java Application and you should see the result in the Console printed out.

Conclusion

This is not indepth – this may not even be 100% correct, but it just gives you a taste of what can be achieved – it’s up to you now to read up more on Java Web Services.  Good luck !

PS – Take a sec just to vote whether this article helped you or not – see widget below.  If not, tell me what’t wrong with it and I’ll try and improve it.  I love feedback so I look forward to your comments!

A Simple SOAP Web Service Example in Eclipse (Ganymede)