04-23-2021 09:54 AM
I have recently found this tool and plan to use it to generate reports on the success of UI Automation. I am however unable to connect. There seems to be an issue with my login but I have rights in the front end. Do I need different permissions to run this?
The script i'm using:
java -cp .\classes;.\lib\saaj-api.jar;.\lib\saaj-impl.jar;.\lib\mail.jar;.\lib\activation.jar;.\lib\jaxm-api.jar;.\lib\jaxm-runtime.jar;.\lib\xercesImpl.jar;.\lib\xml-apis.jar AxlSqlToolkit -username=MYCUCfrontendMLOGION -password=MYCUCMfrontPASSWORD -host=REDACTED
The return:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/12.5"><SOAP-ENV:Header/><SOAP-ENV:Body><ns:executeSQLQuery sequence="1619192521581"><sql>select * from callmanager</sql></ns:executeSQLQuery></SOAP-ENV:Body></SOAP-ENV:Envelope>
---------------------
Apr 23, 2021 4:42:02 PM com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
SEVERE: SAAJ0008: Bad Response; Unauthorized
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (401Unauthorized
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at AxlSqlToolkit.sendMessage(AxlSqlToolkit.java:150)
at AxlSqlToolkit.execute(AxlSqlToolkit.java:211)
at AxlSqlToolkit.main(AxlSqlToolkit.java:256)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (401Unauthorized
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
... 4 more
CAUSE:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (401Unauthorized
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at AxlSqlToolkit.sendMessage(AxlSqlToolkit.java:150)
at AxlSqlToolkit.execute(AxlSqlToolkit.java:211)
at AxlSqlToolkit.main(AxlSqlToolkit.java:256)
CAUSE:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (401Unauthorized
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at AxlSqlToolkit.sendMessage(AxlSqlToolkit.java:150)
at AxlSqlToolkit.execute(AxlSqlToolkit.java:211)
at AxlSqlToolkit.main(AxlSqlToolkit.java:256)
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (401Unauthorized
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at AxlSqlToolkit.sendMessage(AxlSqlToolkit.java:150)
at AxlSqlToolkit.execute(AxlSqlToolkit.java:211)
at AxlSqlToolkit.main(AxlSqlToolkit.java:256)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (401Unauthorized
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
... 4 more
CAUSE:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (401Unauthorized
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at AxlSqlToolkit.sendMessage(AxlSqlToolkit.java:150)
at AxlSqlToolkit.execute(AxlSqlToolkit.java:211)
at AxlSqlToolkit.main(AxlSqlToolkit.java:256)
CAUSE:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (401Unauthorized
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at AxlSqlToolkit.sendMessage(AxlSqlToolkit.java:150)
at AxlSqlToolkit.execute(AxlSqlToolkit.java:211)
at AxlSqlToolkit.main(AxlSqlToolkit.java:256)
c:\axlcisco\axlsqltoolkit>
Solved! Go to Solution.
04-23-2021 11:31 AM
The 401 response does seem to indicate the credentials/permissions are the issue. Testing the toolkit sample just now it seems to work for me.
If the credentials are you usual 'full admin' set, then those should work - not sure what might be going on. If not, check here to see if the correct role is assigned: https://developer.cisco.com/docs/axl/#!authentication/using-basic-authentication
04-23-2021 10:13 AM
I think you need to include a BASIC AUTH header, which is the base64 encoding of an application user's username and password (assuming the application user belongs to the right groups).
However, I have to ask, are you planning to build a Java application based on converting the WSDL to Java classes? I don't recommend that at all. It's very difficult to use and prone to be slow and buggy.
It's much easier, if you need to use Java, to pass SOAP requests, etc. I think that's what you're already doing, but I just wanted to make sure.
04-23-2021 10:29 AM
Here are samples I pulled from the web. Two are REST operations, but this should give you the basic idea that it's an http header thing.
public class TestClient { public static void main(String[] args) throws MalformedURLException { URL url = new URL("http://localhost:9993/ws/hello?wsdl"); QName qname = new QName("http://authentication.jaxws.com/", "HelloWorldImplService"); Service service = Service.create(url, qname); HelloWorldImpl hello = service.getPort(HelloWorldImpl.class); Map<String, Object> req_ctx =((BindingProvider)hello).getRequestContext(); req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:9993/ws/hello?wsdl"); Map<String, List<String>> headers = new HashMap<String, List<String>>(); headers.put("Username",Collections.singletonList("Username")); headers.put("Password", Collections.singletonList("Password")); req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); System.out.println(hello.sayHello("username")); } }
String encoding = Base64Encoder.encode(user + ":" + pwd); HttpPost httpPost = new HttpPost("http://host:post/test/login"); httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding); System.out.println("executing request " + httpPost.getRequestLine()); HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity();
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Base64; public class HttpBasicAuth { public static void main(String[] args) { try { URL url = new URL ("http://ip:port/login"); String encoding = Base64.getEncoder().encodeToString(("test1:test1").getBytes("UTF-8")); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setRequestProperty ("Authorization", "Basic " + encoding); InputStream content = (InputStream)connection.getInputStream(); BufferedReader in = new BufferedReader (new InputStreamReader (content)); String line; while ((line = in.readLine()) != null) { System.out.println(line); } } catch(Exception e) { e.printStackTrace(); } } }
04-26-2021 02:02 AM
Thank you.
04-23-2021 11:31 AM
The 401 response does seem to indicate the credentials/permissions are the issue. Testing the toolkit sample just now it seems to work for me.
If the credentials are you usual 'full admin' set, then those should work - not sure what might be going on. If not, check here to see if the correct role is assigned: https://developer.cisco.com/docs/axl/#!authentication/using-basic-authentication
04-26-2021 02:05 AM
Thank you. That's done it - The AXL permissions on my service account weren't set.
Is there a resource that lists all the tables/view in the schema? So that I can form my queries without trial and error.
04-26-2021 04:59 AM
For record, I've now foudn the Table list here : 14 CUCM Data Dictionary - AXL - Document - Cisco DevNet
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide