The Community is hosting an End of Summer sweepstakes! Participants must complete tasks to earn tickets that will enter them with a chance to win a free year of Constant Contact and other great prizes!*
*No Purchase Necessary. For Official Rules, visit here. Constant Contact’s End of Summer 2020 Sweepstakes ends on October, 20, 2020 at 11:50 PM EST.

415 Unsupported Media Type when (Java HttpPut)

SOLVED
Go to solution
Highlighted
Occasional Participant

415 Unsupported Media Type when (Java HttpPut)

I'm having trouble doing an HttpPut in Java. Getting a "415 Unsupported Media Type" error.

 

Here's my put method:

 

    public HttpEntity put(String path, String xml) throws Exception
    {
    	// Use HTTPS
        HttpHost targetHost = new HttpHost("api.constantcontact.com", 443, "https");

        DefaultHttpClient httpclient = new DefaultHttpClient();
        httpclient.getCredentialsProvider().setCredentials(new AuthScope(targetHost.getHostName(),
    		targetHost.getPort()), new UsernamePasswordCredentials(apikey+"%"+username, password));

        // Use BASIC authentication
        AuthCache authCache = new BasicAuthCache();
        BasicScheme basicAuth = new BasicScheme();
        authCache.put(targetHost, basicAuth);
        BasicHttpContext localcontext = new BasicHttpContext();
        localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);
        
        // Put the request
        HttpPut httpput = new HttpPut("/ws/customers/"+username+path);
        httpput.addHeader("Content-Type", "application/atom+xml");
        StringEntity entity = new StringEntity(xml, "UTF-8");
        entity.setContentType("application/xml");
        httpput.setEntity(entity);
        HttpResponse response = httpclient.execute(targetHost, httpput, localcontext);
        StatusLine status = response.getStatusLine();
        if (status.getStatusCode() != HttpStatus.SC_OK)
    	{
        	throw new Exception(status.getStatusCode()+" "+status.getReasonPhrase());
    	}
        return response.getEntity();
    }

 Here's the XML entity:

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<entry xmlns="http://www.w3.org/2005/Atom">
    <title type="text"> </title>
    <updated>2008-07-23T14:21:06.407Z</updated>
    <author/><id>data:,none</id>
    <summary type="text">Contact</summary>
    <content type="application/vnd.ctct+xml">
        <Contact xmlns="http://ws.constantcontact.com/ns/1.0/">
            <EmailAddress>nobody@nowhere.com</EmailAddress>
            <OptInSource>ACTION_BY_CUSTOMER</OptInSource>
            <ContactLists>
                <ContactList id="http://api.constantcontact.com/ws/customers/.../lists/0"/>
            </ContactLists>
        </Contact>
    </content>
</entry>

 

 

Thanks.

Tom

 

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted
Moderator

Re: 415 Unsupported Media Type when (Java HttpPut)

415 Error indicates that you are making a request that is not allowed on that resource (PUT request not allowed, for example) or that your content type is incorrect.  From your code, it appears that the content type is correct.  My guess would be that the URI you're creating for your request is incorrect.

 

PUT requests are only allows on the actual Contact resource you are trying to update.  For those requests, the format of the URI is:

 

https://api.constantcontact.com/ws/customers/{Username}/contacts/{Contact_ID}

 

Without seeing the actual URI you're posting to, it's hard to tell if this is the actual cause.  415 error does not indicate that anything is wrong with your XML though, 415 errors are thrown before the XML is even parsed (it's a request type validation error, thus we don't even look at the contents of your request).  Can you let us know the actual URI you're makin the PUT to?

Dave Berard
Senior Product Manager, Constant Contact

View solution in original post

Tags (1)
11 REPLIES 11
Highlighted
Occasional Participant

Re: 415 Unsupported Media Type when (Java HttpPut)

Looking over this post, I see that the XML looks malformed (no <author> tag). I must have accidentally deleted in in the cut/paste/format effort. This XML is created and rendered using DOM, so the starting <author> tag is surely there.

Highlighted
Employee

Re: 415 Unsupported Media Type when (Java HttpPut)

Hello,

 

I see that you may have resolved this on your own, but I wanted to check in with you to see if you needed any additional help.  If you are still having trouble just let us know!

 

Regards,

Benjamin Soder
NOC Analyst
Constant Contact
Highlighted
Occasional Participant

Re: 415 Unsupported Media Type when (Java HttpPut)

I have not resolved this. I double-checked the XML and it is correct. I removed the XML normalization that resulted in the orphan <author/> tag so that I had "<author> <author/>". Unfortunately, I'm still getting the 415 error. Any help you can offer would be greatly appreciated.

Highlighted
Moderator

Re: 415 Unsupported Media Type when (Java HttpPut)

415 Error indicates that you are making a request that is not allowed on that resource (PUT request not allowed, for example) or that your content type is incorrect.  From your code, it appears that the content type is correct.  My guess would be that the URI you're creating for your request is incorrect.

 

PUT requests are only allows on the actual Contact resource you are trying to update.  For those requests, the format of the URI is:

 

https://api.constantcontact.com/ws/customers/{Username}/contacts/{Contact_ID}

 

Without seeing the actual URI you're posting to, it's hard to tell if this is the actual cause.  415 error does not indicate that anything is wrong with your XML though, 415 errors are thrown before the XML is even parsed (it's a request type validation error, thus we don't even look at the contents of your request).  Can you let us know the actual URI you're makin the PUT to?

Dave Berard
Senior Product Manager, Constant Contact

View solution in original post

Tags (1)
Highlighted
Occasional Participant

Re: 415 Unsupported Media Type when (Java HttpPut)

Because this is a new contact (no contact ID yet), I am PUT'ing it to the contacts collection ".../contacts". This is what I interpreted the API to say. After seeing your message, I reread the "Creating a contact" API documentation and it says that I should be POST'ing (not PUT'ing) to the contacts collection. I'll give that a shot, and any other suggestions are welcome.

Highlighted
Moderator

Re: 415 Unsupported Media Type when (Java HttpPut)

You got it exactly Kristi!  There are some RESTful webservices that interpret PUT as "Update or create if resource doesn't exist".  Our API is more literal in that a POST request is a create (and must be done on the Collection) and a PUT request is an update (and must be done on the individual resource you are updating).  This is because we do create a unique internal ID value for every Contact and thus a PUT request to update or create doesn't make sense in our API.  You should be all set if you change the request type to POST for the creation.

 

Hope this explains it and gets you going!

Dave Berard
Senior Product Manager, Constant Contact
Highlighted
Occasional Participant

Re: 415 Unsupported Media Type when (Java HttpPut)

I'm getting closer. It's now a 400 error (bad request).

 

My post method looks exactly like the PUT method (above). Here's the XML document that I'm POST'ing:

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<entry xmlns="http://www.w3.org/2005/Atom">

<title type="text"> </title>

<updated>2011-04-18T10:54:10.404-0500</updated>

<author> </author>

<id>data:,none</id>

<summary type="text">Contact</summary>

<content type="application/vnd.ctct+xml">

<Contact xmlns="http://ws.constantcontact.com/ns/1.0/">

<EmailAddress>nobody@nowhere.com</EmailAddress>

<OptInSource>ACTION_BY_CUSTOMER</OptInSource>

<ContactLists>

<ContactList id="http://api.constantcontact.com/ws/customers/westbanklibrary/lists/0"/>

</ContactLists>

</Contact>

</content>

</entry>

Highlighted
Moderator

Re: 415 Unsupported Media Type when (Java HttpPut)

Looks like the problem is your list ID being invalid.  List ID values start at 1 and increment as you create more lists.  0 would always be an invalid List ID number so it should be correctly returning a 400 Bad Request response.

 

For more information on retreiving list IDs, please see this overview: http://community.constantcontact.com/t5/Documentation/Retrieving-a-Contact-List-Collection/ba-p/2506...

Dave Berard
Senior Product Manager, Constant Contact
Highlighted
Occasional Participant

Re: 415 Unsupported Media Type when (Java HttpPut)

The problem now is that when I retrieve a contact, it doesn't contain the contact lists. Whether I look it up by "contact-id" or by email address, the result is the same. The following user is (according to the Constant Contact GUI) subscribed to our General Newsletter (/list/2). However, this is the XML that I get back:

 

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?><feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://api.constantcontact.com:443/ws/customers/westbanklibrary/contacts</id>
  <title type="text">Contacts for Customer: westbanklibrary</title>
  <link href="contacts"/>
  <link href="contacts" rel="self"/>
  <author>
    <name>westbanklibrary</name>
  </author>
  <updated>2011-04-18T21:15:39.787Z</updated>
  <link href="/ws/customers/westbanklibrary/contacts" rel="first"/>
  <link href="/ws/customers/westbanklibrary/contacts?email=janet%40property-tax.com" rel="current"/>
  <entry>
    <link href="/ws/customers/westbanklibrary/contacts/3" rel="edit"/>
    <id>http://api.constantcontact.com:443/ws/customers/westbanklibrary/contacts/3</id>
    <title type="text">Contact: janet@property-tax.com</title>
    <updated>2011-04-18T21:15:39.811Z</updated>
    <author>
      <name>Constant Contact</name>
    </author>
    <content type="application/vnd.ctct+xml">
      <Contact xmlns="http://ws.constantcontact.com/ns/1.0/" id="http://api.constantcontact.com:443/ws/customers/westbanklibrary/contacts/3">
        <Status>Active</Status>
        <EmailAddress>janet@property-tax.com</EmailAddress>
        <EmailType>HTML</EmailType>
        <Name/>
        <OptInTime>2011-04-18T18:05:31.102Z</OptInTime>
        <OptInSource>ACTION_BY_CUSTOMER</OptInSource>
        <Confirmed>true</Confirmed>
        <InsertTime>2011-04-18T18:05:31.102Z</InsertTime>
      </Contact>
    </content>
  </entry>
</feed>

 

 

Thanks,

Tom

 

P.S. Kristi is the librarian in charge of the newsletters. I'm the developer.

Developer Portal

View API documentation, code samples, get your API key.

Visit Page

Constant Contact 2020 End of Summer Community Sweepstakes!

The Constant Contact User Community is hosting a sweepstakes. The more you participate, the more chances you have to win! Read on to learn more...

Read More
Featured