NPE creating a new attachment
I'm trying to create a new attachment using the following code and I keep
getting a null pointer exception. My guess is that I'm not allowed to have
a null project area when creating a new attachment but I'm not able to find
any documentation or javadoc that mentions that. Also, when I look up
existing attachments and invoke the getProjectArea() method, all of them
return null so that makes me think that by not providing a project area, the
attachment is simply not associated with a specific project and can be
linked to by any workitem.
Can someone shed some light on this? Thanks!
Here is the code:
===============================================================
I first would iterate through existing work items finding the ones that had
references to attachments. I would then get that attachment handle:
IAuditableHandle handle = (IAuditableHandle) ((IItemReference)
ref).getReferencedItem();
if (handle instanceof IAttachmentHandle) {
// IAttachment attachment = auditableClient.fetchCurrentAuditable(handle,
IAttachment.FULL_PROFILE, monitor);
IAttachment attachment = auditableClient.resolveAuditable(handle,
IAttachment.FULL_PROFILE, monitor);
-------------------------------------------------------------------------------------------------
The "attachment" variable above is the "a" variable below. So I have a
fully resolved Attachment object and then I'm just trying to create an exact
copy of the existing attachment using the code below:
NOTE: pa = IProjectArea of the existing attachment and it is always null.
// Get the contents of the original attachment
ByteArrayOutputStream bos = new ByteArrayOutputStream();
serviceContent.retrieveContent(a.getContent(), bos, null);
byte[] content = bos.toByteArray();
// Create the new attachment in the repository
IAttachment attachmentNew = serviceNewWI.createAttachment(pa, a.getName(),
a.getDescription(), a.getContent().getContentType(),
a.getContent().getCharacterEncoding(), new ByteArrayInputStream(content),
monitor);
--------------------------------------------
The result is the following stacktrace:
Exception in thread "main"
com.ibm.team.repository.common.transport.ServiceMethodInvocationError:
java.lang.NullPointerException
at
com.ibm.team.repository.transport.client.RemoteTeamService.getAppropriateException(RemoteTeamService.java:571)
at
com.ibm.team.repository.transport.client.RemoteTeamService.executeMethod(RemoteTeamService.java:474)
at
com.ibm.team.repository.transport.client.RemoteTeamService.invoke(RemoteTeamService.java:184)
at
com.ibm.team.repository.transport.client.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:43)
at $Proxy16.save(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at
com.ibm.team.repository.client.internal.ServiceInterfaceProxy.invokeServiceCall(ServiceInterfaceProxy.java:149)
at
com.ibm.team.repository.client.internal.ServiceInterfaceProxy.invoke(ServiceInterfaceProxy.java:84)
at $Proxy16.save(Unknown Source)
at
com.ibm.team.workitem.client.internal.WorkItemSaveTransport$1.run(WorkItemSaveTransport.java:33)
at
com.ibm.team.repository.client.internal.TeamRepository$3.run(TeamRepository.java:1123)
at
com.ibm.team.repository.common.transport.CancelableCaller.call(CancelableCaller.java:76)
at
com.ibm.team.repository.client.internal.TeamRepository.callCancelableService(TeamRepository.java:1116)
at
com.ibm.team.workitem.client.internal.WorkItemSaveTransport.call(WorkItemSaveTransport.java:30)
at
com.ibm.team.workitem.client.internal.WorkItemSaveRunnable.run(WorkItemSaveRunnable.java:37)
at
com.ibm.team.process.common.advice.ProcessRunnable.internalRun(ProcessRunnable.java:123)
at
com.ibm.team.process.internal.common.advice.runtime.OperationAdviceManager.runRunnable(OperationAdviceManager.java:1317)
at
com.ibm.team.process.internal.common.advice.runtime.OperationAdviceManager.execute(OperationAdviceManager.java:192)
at
com.ibm.team.process.internal.client.ProcessClientService.execute(ProcessClientService.java:566)
at
com.ibm.team.workitem.client.internal.WorkItemClient.save(WorkItemClient.java:538)
at
com.ibm.team.workitem.client.internal.WorkItemClient.save(WorkItemClient.java:526)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.internalSaveAuditables(WorkItemCommon.java:999)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.internalSaveAuditables(WorkItemCommon.java:984)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.saveAuditables(WorkItemCommon.java:976)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.saveAuditable(WorkItemCommon.java:966)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.saveAttachment(WorkItemCommon.java:832)
at
com.ibm.team.workitem.client.internal.WorkItemClient.createAttachment(WorkItemClient.java:521)
at snippets.Migrate1.migrateAttachments(Migrate1.java:257)
at snippets.Migrate1.main(Migrate1.java:158)
Caused by: java.lang.NullPointerException
Any thoughts??
--
Dave Draeger
IBM WebSphere Serviceability Development
getting a null pointer exception. My guess is that I'm not allowed to have
a null project area when creating a new attachment but I'm not able to find
any documentation or javadoc that mentions that. Also, when I look up
existing attachments and invoke the getProjectArea() method, all of them
return null so that makes me think that by not providing a project area, the
attachment is simply not associated with a specific project and can be
linked to by any workitem.
Can someone shed some light on this? Thanks!
Here is the code:
===============================================================
I first would iterate through existing work items finding the ones that had
references to attachments. I would then get that attachment handle:
IAuditableHandle handle = (IAuditableHandle) ((IItemReference)
ref).getReferencedItem();
if (handle instanceof IAttachmentHandle) {
// IAttachment attachment = auditableClient.fetchCurrentAuditable(handle,
IAttachment.FULL_PROFILE, monitor);
IAttachment attachment = auditableClient.resolveAuditable(handle,
IAttachment.FULL_PROFILE, monitor);
-------------------------------------------------------------------------------------------------
The "attachment" variable above is the "a" variable below. So I have a
fully resolved Attachment object and then I'm just trying to create an exact
copy of the existing attachment using the code below:
NOTE: pa = IProjectArea of the existing attachment and it is always null.
// Get the contents of the original attachment
ByteArrayOutputStream bos = new ByteArrayOutputStream();
serviceContent.retrieveContent(a.getContent(), bos, null);
byte[] content = bos.toByteArray();
// Create the new attachment in the repository
IAttachment attachmentNew = serviceNewWI.createAttachment(pa, a.getName(),
a.getDescription(), a.getContent().getContentType(),
a.getContent().getCharacterEncoding(), new ByteArrayInputStream(content),
monitor);
--------------------------------------------
The result is the following stacktrace:
Exception in thread "main"
com.ibm.team.repository.common.transport.ServiceMethodInvocationError:
java.lang.NullPointerException
at
com.ibm.team.repository.transport.client.RemoteTeamService.getAppropriateException(RemoteTeamService.java:571)
at
com.ibm.team.repository.transport.client.RemoteTeamService.executeMethod(RemoteTeamService.java:474)
at
com.ibm.team.repository.transport.client.RemoteTeamService.invoke(RemoteTeamService.java:184)
at
com.ibm.team.repository.transport.client.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:43)
at $Proxy16.save(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at
com.ibm.team.repository.client.internal.ServiceInterfaceProxy.invokeServiceCall(ServiceInterfaceProxy.java:149)
at
com.ibm.team.repository.client.internal.ServiceInterfaceProxy.invoke(ServiceInterfaceProxy.java:84)
at $Proxy16.save(Unknown Source)
at
com.ibm.team.workitem.client.internal.WorkItemSaveTransport$1.run(WorkItemSaveTransport.java:33)
at
com.ibm.team.repository.client.internal.TeamRepository$3.run(TeamRepository.java:1123)
at
com.ibm.team.repository.common.transport.CancelableCaller.call(CancelableCaller.java:76)
at
com.ibm.team.repository.client.internal.TeamRepository.callCancelableService(TeamRepository.java:1116)
at
com.ibm.team.workitem.client.internal.WorkItemSaveTransport.call(WorkItemSaveTransport.java:30)
at
com.ibm.team.workitem.client.internal.WorkItemSaveRunnable.run(WorkItemSaveRunnable.java:37)
at
com.ibm.team.process.common.advice.ProcessRunnable.internalRun(ProcessRunnable.java:123)
at
com.ibm.team.process.internal.common.advice.runtime.OperationAdviceManager.runRunnable(OperationAdviceManager.java:1317)
at
com.ibm.team.process.internal.common.advice.runtime.OperationAdviceManager.execute(OperationAdviceManager.java:192)
at
com.ibm.team.process.internal.client.ProcessClientService.execute(ProcessClientService.java:566)
at
com.ibm.team.workitem.client.internal.WorkItemClient.save(WorkItemClient.java:538)
at
com.ibm.team.workitem.client.internal.WorkItemClient.save(WorkItemClient.java:526)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.internalSaveAuditables(WorkItemCommon.java:999)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.internalSaveAuditables(WorkItemCommon.java:984)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.saveAuditables(WorkItemCommon.java:976)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.saveAuditable(WorkItemCommon.java:966)
at
com.ibm.team.workitem.common.internal.WorkItemCommon.saveAttachment(WorkItemCommon.java:832)
at
com.ibm.team.workitem.client.internal.WorkItemClient.createAttachment(WorkItemClient.java:521)
at snippets.Migrate1.migrateAttachments(Migrate1.java:257)
at snippets.Migrate1.main(Migrate1.java:158)
Caused by: java.lang.NullPointerException
Any thoughts??
--
Dave Draeger
IBM WebSphere Serviceability Development
2 answers
Ah, yes, that makes sense now as the work items were created using M3 (Beta 1) and then we used the repotools from Beta
2 / Beta 3 / GA to migrate the tasks up to GA. Then I was taking a look at the tasks in the GA server after they were
migrated and thus they had no project area associated with them.
--
Dave Draeger
IBM WebSphere Serviceability Development
"Christof Marti" <christof_marti> wrote in message news:g6ju1a$dvu$1@localhost.localdomain...
2 / Beta 3 / GA to migrate the tasks up to GA. Then I was taking a look at the tasks in the GA server after they were
migrated and thus they had no project area associated with them.
--
Dave Draeger
IBM WebSphere Serviceability Development
"Christof Marti" <christof_marti> wrote in message news:g6ju1a$dvu$1@localhost.localdomain...
There should indeed be a project area, only attachments created prior to Beta2 could still have none. How did you
create the attachments having no project area?
Christof
Jazz Work Item team