12-26-2019 11:33 AM
Good Day,
I am a complete beginner with AXL, Java, and Eclipse IDE.
I have been trying to begin learning in these areas by reviewing what information I can find online, but am struggling!
Ive been able to do some basic stuff like getphone to pull phone device information, and set a phone device description ( as a basic step) using UpdatePhoneReq. But I just havent had any luck trying to run SQL queries via axl.
There seems to be a couple different methods for accomplishing an SQL query.
One appears to be by simply defining the query in a string, then using 'ExecuteSQLQueryReq' in a manner similiar to the code below:
String sSQLQuery = "SELECT * FROM numplan"; //V2 ExecuteSQLQueryReq axlParams = new ExecuteSQLQueryReq(); axlParams.setSql(sSQLQuery); try{ ExecuteSQLQueryRes getSQLResponse = axlPort.executeSQLQuery(axlParams); List<Object> returnList = new ArrayList<Object>(); //added to orig returnList = getSQLResponse.getReturn().getRow(); for (Object object : returnList) { System.out.println(object.toString() + "\n"); } } catch (AXLError e ) { System.out.println("An AXLError occurred:" + e.getFaultInfo()); } }
I can get this method to run, but no matter how I try to enumerate what should be the returned values, I just get Row: null; entries in the output (it does contain the correct number of rows tho...) (I should also mention that when I pull the axl logs from call manager(10.5 btw), the query looks properly formed and no errors are shown. I dont see any response information in the log but I dont know that I am supposed to)
The other method appears to be by constructing the soap structures manually like this:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/8.5"> <soapenv:Header/> <soapenv:Body> <ns:executeSQLQuery sequence="1"> <sql>select * from processnode</sql> </ns:executeSQLQuery> </soapenv:Body> </soapenv:Envelope>
For that style, I was never able to get past compiler muster: I couldnt get it to like the soap tag structures.
So my questions are:
Why are there 2 different methods, when it seams like the ExecuteSQLQueryRes method would be more straight-forward?
Is the direct SOAP method supported via Java?
Why cant I see anything but nulls using the ExecuteSQLQueryRes method - even tho I have gone to command line on the pub, executed the same simple query, and see data populated?
Is there a preferred method between these 2? if so, why?
Should I be trying to do this via Java? I chose that language because I found a few demos and videos that used Java and I wanted to try to keep the already steep learning curve down as much as possible. If that answer is dependent upon the application, my immediate end goal is to create a form-driven api that would allow service-desk staff do basic phone builds in a simplified 'supercopy' type fashion, while limiting their access to just that function.
Are there any good, basic, resources that could help me slog through the basics? I done a lot of search-engine searches and I haven't been able to find much that steps me through a lot of this in a helpful fashion. Many of my directed searches wind up at dead links (a lot of jiveon's). Others are too far from applicability, or I cant get them to run at all. Part of the problem is probably because I dont have the luxury, time-wise, of first knowing, or learning java, then eclipse, then axl, so I can focus on 1 thing at a time - I have to dive in with a solution-based approach and learn as I go.
I'd appreciate your thoughts and any direction you can provide!
PS, something else I noticed is that there seems to be 2 methods of attempting to display returned information: just iterating through - as I tried in the first example listed - and one that uses getElementsByTagName like below:
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
(some other code to connect and perform query)
Element returnValue = Element)returnList.get(1);// Field test = Doc.class.getField(phoneName); Object dNumber = returnValue.getElementsByTagName("phoneName").item(0).getFirstChild().getTextContent();
but I can't get it to recognize getElementsByTagName, and I cant find any clear help on doing so. Can that method be used with Java? Is there a basic tutorial somewhere on setting it up and getting it working?
thx again
12-27-2019 01:13 PM
Hi All,
For a little further enlightenment, I downloaded SoapUI and from there was able to use 'executeSQLQuery' to run exactly the same query I have been attempting in my java code - So the problem that started all of the questions doesnt relate to:
The server Im running against - used the same one
the credentials - same
the sql query - same
and RTMT AXL log shows exactly what it did on Java attempts.
So AXL calls appear they should work, and shouldnt require manually building SOAP requests
and there must be a problem with the way I am capturing and iterating he return data.
But the basic questions still remain:
Can Java use the manually constructed SOAP SQL requests?
Is there an advantage to using those over 'ExecuteSQLQuery'?
Is Java a good choice over, say C++ or PHP - especially when looking for ease-of-learning?
Add to that the more specific questions regarding the problem with my code. I am capturing the return (at least I think I am) in getSQLResponse:
ExecuteSQLQueryRes getSQLResponse = axlPort.executeSQLQuery(axlParams);
then I think Im dumping each row into array returnList:
List<Object> returnList = new ArrayList<Object>(); returnList = getSQLResponse.getReturn().getRow();
Then I think Im iterating through that, converting it to string, and dumping to console with:
for (Object object : returnList) { System.out.println(object.toString() + "\n"); }
though Ive also tried:
for (int i = 0; i < returnList.size(); i++) { System.out.println(returnList.get(i)); }
Im sure making some basic mistake - does anyone see what it is?
thanks
01-06-2020 12:39 AM
Regardind your qestion:
Is Java a good choice over, say C++ or PHP - especially when looking for ease-of-learning?
Well that depends on your coding experience.
Did you ever use Java, C++, C#, php, perl, python?
Are you familiar with any of these languages?
If not you could nearly start with any of these.
In my opinion coding with eclipse is harder and more complex then other IDEs.
As far as i see not AXL is your main problem it it SOAP Handling within the chosen language.
If you want to test you SQL you can just do it on the CUCM CLI by using the command run sql and your query.
Then you will see if there is anything returned.
01-06-2020 05:30 AM
01-06-2020 07:39 AM
There are a couple of sample AXL+Java apps in this repo that might be helpful: https://developer.cisco.com/codeexchange/github/repo/CiscoDevNet/axl-java-samples
In DevNet we tend to use AXL+Python with Zeep for building samples and demos - if you don't have a strong language preference, you might lean that way..
01-06-2020 12:33 AM
I don't know it you read the documentation and know how AXL is working.
If you call ExecuteSQLQueryReq there will be a SOAP Requst processed by the AXL Api.
If you create a SOAP yourself it is the same.
As Java can handle SOAP Requests and Responses it should work fine.
02-06-2020 05:38 AM
Hi Thedd, I have not yet resolved my issue - unfortunately other demands have kept me away from the project but I hope to resume soon - I have switched to python and zeep, as was suggested by dstaut and a good guy from our vendor staff. It seems to be a little easier to work with than was Java. But I dont know how it will work out overall yet. I just kept hitting roadblocks with the java returns. Hopefully I can start back on the project tonight or tomorrow - at which juncture Im sure you'll hear me whining! thx
02-06-2020 03:07 AM
did you solve your issue?
Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: