Querying with Plain Java Client API problem :(
This line:
The code section below provides more context.
queryClient.getResolvedExpressionResults(projectArea, term, IWorkItem.SMALL_PROFILE);has raised the error
Argument must be an instance of IAuditableHandle, queryClient.getResolvedExpressionResults
The arguments should comply with the following specification:
IWorkItem> IQueryResult<IResolvedResult<IWorkItem>> com.ibm.team.workitem.common.IQueryCommon.getResolvedExpressionResults
The code section below provides more context.
IQueryableAttribute attribute = findAttribute(projectArea, IWorkItem.OWNER_PROPERTY, myProgressMonitor, repo); AttributeExpression Expression1= new AttributeExpression(attribute, AttributeOperation.EQUALS, "dude");
IQueryableAttribute attribute2 = findAttribute(projectArea,IWorkItem.CREATOR_PROPERTY, myProgressMonitor, repo);
AttributeExpression Expression2 = new AttributeExpression(attribute2, AttributeOperation.EQUALS, "guy");
Term term= new Term(Operator.AND); term.add(Expression1); term.add(Expression2);
IQueryClient queryClient= (IQueryClient) repo.getClientLibrary(IQueryClient.class);
queryClient.getResolvedExpressionResults(projectArea, term, IWorkItem.SMALL_PROFILE);
4 answers
'term' is not an Expression..
you want either Expression1 or Expression2..
you want either Expression1 or Expression2..
Comments
showing 5 of 7
show 2 more comments
You can find examples here: https://rsjazz.wordpress.com/ , so help yourself. There is example code for querying. You have a debugger, you have instanceof. See what types you have. Looking at the code does not always help.
Comments
I happened to have searched the board for some keywords and I see that this has been an existing problem, for some at least, since 2011. Ralph I believe you even suggested that the individual who first raised the problem create a work ticket because something is really wrong.
Anyway, the individual Zybnek Vavros discovered that if he adds a dependency to jaxen as the xml parser then the issue goes away.
(The original question can be found here: https://jazz.net/forum/questions/66113/server-problem-with-iauditableclient)
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
Comments
so, here is my little sample, using your code.. works..
this took about 30 minutes to put together, using previous code I had
(published here https://jazz.net/forum/questions/94776/assertionfailedexception-problem-with-getting-the-values-of-attributes a LONG time ago),
ralphs blog, and hints from eclipse.
I have never constructed a query before.
takes repo url, userid, password, project name and user_name_to_find..
only does 'owner'
package com.sd.tools;
import java.net.URI;
import com.ibm.team.process.client.IProcessClientService;
import com.ibm.team.process.common.IProjectArea;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.TeamPlatform;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler.ILoginInfo;
import com.ibm.team.repository.common.IContributor;
import com.ibm.team.repository.common.TeamRepositoryException;
import com.ibm.team.workitem.client.IAuditableClient;
import com.ibm.team.workitem.client.IQueryClient;
import com.ibm.team.workitem.client.IWorkItemClient;
import com.ibm.team.workitem.common.IAuditableCommon;
import com.ibm.team.workitem.common.expression.AttributeExpression;
import com.ibm.team.workitem.common.expression.Expression;
import com.ibm.team.workitem.common.expression.IQueryableAttribute;
import com.ibm.team.workitem.common.expression.QueryableAttributes;
//import com.ibm.team.workitem.common.expression.Term;
import com.ibm.team.workitem.common.model.AttributeOperation;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.query.IQueryResult;
public class QueryUser {
private static class mylog implements org.eclipse.core.runtime.IProgressMonitor
{
public void beginTask(String arg0, int arg1)
{
// TODO Auto-generated method stub
}
public void done()
{
// TODO Auto-generated method stub
}
public void internalWorked(double arg0)
{
// TODO Auto-generated method stub
}
public boolean isCanceled()
{
// TODO Auto-generated method stub
return false;
}
public void setCanceled(boolean arg0)
{
// TODO Auto-generated method stub
}
public void setTaskName(String arg0)
{
// TODO Auto-generated method stub
}
public void subTask(String arg0)
{
// TODO Auto-generated method stub
}
public void worked(int arg0)
{
// TODO Auto-generated method stub
}
}
private static class LoginHandler implements ILoginHandler, ILoginInfo
{
private String fUserId;
private String fPassword;
private LoginHandler(String userId, String password)
{
fUserId = userId;
fPassword = password;
}
public String getUserId()
{
return fUserId;
}
public String getPassword()
{
return fPassword;
}
public ILoginInfo challenge(ITeamRepository repository)
{
return this;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean debug = false;
String repositoryURI = args[0];
String userId = args[1];
String password = args[2];
String projectAreaName = args[3];
String queryUserid = args[4];
mylog monitor = new mylog();
TeamPlatform.startup();
if (debug)
System.out.println("platform started\n");
ITeamRepository teamRepository = TeamPlatform
.getTeamRepositoryService().getTeamRepository(repositoryURI);
if (debug)
System.out.println("logging in\n");
teamRepository.registerLoginHandler(new LoginHandler(userId, password));
try {
teamRepository.login(null);
if (debug)
System.out.println("logged in\n");
URI uri = URI.create(projectAreaName.replaceAll(" ", "%20"));
IProjectArea projectArea = null;
IProcessClientService processClient = (IProcessClientService) teamRepository
.getClientLibrary(IProcessClientService.class);
projectArea = (IProjectArea) processClient.findProcessArea(uri,
null, null);
IAuditableClient auditableClient = (IAuditableClient) teamRepository
.getClientLibrary(IAuditableClient.class);
IWorkItemClient workItemClient = (IWorkItemClient) teamRepository
.getClientLibrary(IWorkItemClient.class);
IQueryClient queryClient = workItemClient.getQueryClient();
IAuditableCommon auditableCommon = (IAuditableCommon) auditableClient.getTeamRepository().getClientLibrary(IAuditableCommon.class);
IQueryableAttribute attribute = QueryableAttributes.getFactory(
IWorkItem.ITEM_TYPE).findAttribute(projectArea,
IWorkItem.OWNER_PROPERTY, auditableCommon, monitor);
IContributor dude_user = teamRepository.contributorManager().fetchContributorByUserId(queryUserid, null);
Expression isOwner = new AttributeExpression(attribute,
AttributeOperation.EQUALS, dude_user);
IQueryResult qr =queryClient.getResolvedExpressionResults(projectArea, isOwner, IWorkItem.SMALL_PROFILE);
System.out.println("number of items returned="+qr.getResultSize(monitor).getTotalAvailable());
} catch (TeamRepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
this took about 30 minutes to put together, using previous code I had
(published here https://jazz.net/forum/questions/94776/assertionfailedexception-problem-with-getting-the-values-of-attributes a LONG time ago),
ralphs blog, and hints from eclipse.
I have never constructed a query before.
takes repo url, userid, password, project name and user_name_to_find..
only does 'owner'
package com.sd.tools;
import java.net.URI;
import com.ibm.team.process.client.IProcessClientService;
import com.ibm.team.process.common.IProjectArea;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.TeamPlatform;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler;
import com.ibm.team.repository.client.ITeamRepository.ILoginHandler.ILoginInfo;
import com.ibm.team.repository.common.IContributor;
import com.ibm.team.repository.common.TeamRepositoryException;
import com.ibm.team.workitem.client.IAuditableClient;
import com.ibm.team.workitem.client.IQueryClient;
import com.ibm.team.workitem.client.IWorkItemClient;
import com.ibm.team.workitem.common.IAuditableCommon;
import com.ibm.team.workitem.common.expression.AttributeExpression;
import com.ibm.team.workitem.common.expression.Expression;
import com.ibm.team.workitem.common.expression.IQueryableAttribute;
import com.ibm.team.workitem.common.expression.QueryableAttributes;
//import com.ibm.team.workitem.common.expression.Term;
import com.ibm.team.workitem.common.model.AttributeOperation;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.query.IQueryResult;
public class QueryUser {
private static class mylog implements org.eclipse.core.runtime.IProgressMonitor
{
public void beginTask(String arg0, int arg1)
{
// TODO Auto-generated method stub
}
public void done()
{
// TODO Auto-generated method stub
}
public void internalWorked(double arg0)
{
// TODO Auto-generated method stub
}
public boolean isCanceled()
{
// TODO Auto-generated method stub
return false;
}
public void setCanceled(boolean arg0)
{
// TODO Auto-generated method stub
}
public void setTaskName(String arg0)
{
// TODO Auto-generated method stub
}
public void subTask(String arg0)
{
// TODO Auto-generated method stub
}
public void worked(int arg0)
{
// TODO Auto-generated method stub
}
}
private static class LoginHandler implements ILoginHandler, ILoginInfo
{
private String fUserId;
private String fPassword;
private LoginHandler(String userId, String password)
{
fUserId = userId;
fPassword = password;
}
public String getUserId()
{
return fUserId;
}
public String getPassword()
{
return fPassword;
}
public ILoginInfo challenge(ITeamRepository repository)
{
return this;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean debug = false;
String repositoryURI = args[0];
String userId = args[1];
String password = args[2];
String projectAreaName = args[3];
String queryUserid = args[4];
mylog monitor = new mylog();
TeamPlatform.startup();
if (debug)
System.out.println("platform started\n");
ITeamRepository teamRepository = TeamPlatform
.getTeamRepositoryService().getTeamRepository(repositoryURI);
if (debug)
System.out.println("logging in\n");
teamRepository.registerLoginHandler(new LoginHandler(userId, password));
try {
teamRepository.login(null);
if (debug)
System.out.println("logged in\n");
URI uri = URI.create(projectAreaName.replaceAll(" ", "%20"));
IProjectArea projectArea = null;
IProcessClientService processClient = (IProcessClientService) teamRepository
.getClientLibrary(IProcessClientService.class);
projectArea = (IProjectArea) processClient.findProcessArea(uri,
null, null);
IAuditableClient auditableClient = (IAuditableClient) teamRepository
.getClientLibrary(IAuditableClient.class);
IWorkItemClient workItemClient = (IWorkItemClient) teamRepository
.getClientLibrary(IWorkItemClient.class);
IQueryClient queryClient = workItemClient.getQueryClient();
IAuditableCommon auditableCommon = (IAuditableCommon) auditableClient.getTeamRepository().getClientLibrary(IAuditableCommon.class);
IQueryableAttribute attribute = QueryableAttributes.getFactory(
IWorkItem.ITEM_TYPE).findAttribute(projectArea,
IWorkItem.OWNER_PROPERTY, auditableCommon, monitor);
IContributor dude_user = teamRepository.contributorManager().fetchContributorByUserId(queryUserid, null);
Expression isOwner = new AttributeExpression(attribute,
AttributeOperation.EQUALS, dude_user);
IQueryResult qr =queryClient.getResolvedExpressionResults(projectArea, isOwner, IWorkItem.SMALL_PROFILE);
System.out.println("number of items returned="+qr.getResultSize(monitor).getTotalAvailable());
} catch (TeamRepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}