Abdera多部分请求引发nullpointer异常

Abdera多部分请求引发nullpointer异常

本文介绍了Apache Abdera多部分请求引发nullpointer异常(IBM连接API)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Apache abdera将多部分请求发布到IBM Connection 4.0 API.我从Abdera API获取nullpointer异常.请让我知道根本原因是什么.

I am using Apache abdera to post multipart request to IBM connection 4.0 API. I am getting nullpointer exception from Abdera API. Please let me know what's the root cause.

private void createEntryWithAttachment(){
    try {
        String activityId = "urn:lsid:ibm.com:oa:662d0dc7-0308-48ee-8291-d730c733d2d1";
        String activityIdLocal = activityId.substring(activityId.lastIndexOf(":")+1, activityId.length());
        String createEntryLocal = createEntry+activityIdLocal;

        Abdera abdera = new Abdera();
        AbderaClient client = new AbderaClient(abdera);
        AbderaClient.registerTrustManager();
        System.out.println("pd --->"+pd);
        client.addCookie("poktam2cl.iespc.ibm.com", "PD-S-SESSION-ID", pd, "/", null, true);

        RequestOptions requestOptions = client.getDefaultRequestOptions();
        requestOptions.setUseChunked(true);
        requestOptions.setHeader("Connection", "close");
        requestOptions.setHeader("Content-Type", "multipart/related;type=\"application/atom+xml\"");
        requestOptions.setContentType("multipart/related;type=\"application/atom+xml\"");
        requestOptions.setSlug("Sample.txt");


        Credentials credentials = new UsernamePasswordCredentials(username, password);
        client.addCredentials(createEntryLocal, AuthScope.ANY_REALM,AuthScope.ANY_SCHEME, credentials);

        Entry entry = abdera.getFactory().newEntry();
        entry.setTitle("create entry with attachment title ");
        entry.setContent("create entry with attachment content");

        javax.xml.namespace.QName field = new QName("http://www.ibm.com/xmlns/prod/sn", "field", "snx");
        org.apache.abdera.model.Element fieldElement = entry.addExtension(field);
        fieldElement.setAttributeValue("type", "file");
        fieldElement.setAttributeValue("name", "sampletextfile1");
        fieldElement.setAttributeValue("position", "3000");

        FileInputStream fis = new FileInputStream(filepath);
        requestOptions.setHeader("Content-Length", "35");

        entry.addCategory("http://www.ibm.com/xmlns/prod/sn/type","entry", "Entry");

        ClientResponse response = client.post(createEntryLocal, entry, fis, "multipart/related;type=\"application/atom+xml\"", requestOptions );

        System.out.println("Entry Created with attachment's resp: " + response.getStatus());

        if(response.getStatus() == 201){
            System.out.println("Entry Created with attachment successfully .....");
            printIBMConnectionErrorMessage(response);
        }else{
            System.out.println("Entry with attachment creation failed");
            printIBMConnectionErrorMessage(response);
            //System.exit(0);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

输出

java.lang.NullPointerException
at org.apache.abdera.protocol.client.util.MultipartRelatedRequestEntity.writeInput(MultipartRelatedRequestEntity.java:74)
at org.apache.abdera.protocol.client.util.MultipartRelatedRequestEntity.writeRequest(MultipartRelatedRequestEntity.java:59)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at org.apache.abdera.protocol.client.AbderaClient.execute(AbderaClient.java:688)
at org.apache.abdera.protocol.client.AbderaClient.post(AbderaClient.java:306)
at JavaAgentEntryWithAttachment.createEntryWithAttachment(JavaAgentEntryWithAttachment.java:157)
at JavaAgentEntryWithAttachment.main(JavaAgentEntryWithAttachment.java:66)

此异常来自abdera API,该类称为MultipartRelatedRequestEntity.java,第74行.我在下面放置了第74行源代码.因此,很明显contentSrc为null& Abdera API不允许我设置此值.请让我知道我在这里想念的东西.

This exception is coming from abdera API, class called MultipartRelatedRequestEntity.java, Line no 74. I have placed line no 74 source code below. So its clear that contentSrc is null & Abdera API not allowing me to set this value. Please let me know what I am missing here.

String contentId = entry.getContentSrc().toString();

推荐答案

可以避免空指针并在一个请求中执行.我遇到了同样的问题,并创建了另一个问题,并设法找到了解决方案.您可以找到它这里.

It is possible to avoid the nullpointer and do it in one request. I had the same issue and created another issue and managed to find a solution. You can find it here.

这归结为以下代码示例,您在其中创建了 HttpClient部分,其中可以包含 StringPart FilePart

It comes down to the following code example where you create a HttpClient Part which can contain a StringPart and a FilePart

  final Entry entry = // ... Create your Entry
  final RequestOptions options = this.client.getDefaultRequestOptions();
  options.setHeader("Content-Type", "multipart/related;type=\"application/atom+xml\"");

  StringPart entryPart = new StringPart("entry", entry.toString());
  entryPart.setContentType("application/atom+xml");

  FilePart filePart = new FilePart("file", new File(resource.getFile()));

  RequestEntity request = new MultipartRequestEntity(new Part[] { entryPart, filePart}, this.client.getHttpClientParams());
  ClientResponse response = client.post(this.url + this.activityId, request, options);

希望这对将来使用Abdera的人们有帮助.

Hope this will help people in the future if they are using Abdera.

这篇关于Apache Abdera多部分请求引发nullpointer异常(IBM连接API)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 05:21