2016-08-06 5 views
0

Ich bin gerade dabei, eine apps in Ruhe zu erstellen (um meine Fähigkeiten in dieser Domäne zu verbessern). Um ehrlich zu sein habe ich vor langer Zeit mit JSP und Servlet gearbeitet, aber jetzt kann ich sehen, dass JSON auf einer Ruhepi ist die neue Art zu arbeiten. Also sagte ich, warum ich es nicht tun werde. Zuerst arbeite ich mit meinem alten App-Server Tomcat (ich liebe diese Katze). Ich folgte, was ich sah in http://www.lessonslab.com/building-restful-webservices-using-apache-cxf/150/Post Json erhalten Null für Parameter

Es ist wirklich nett und ich war in der Lage, einen GET-Service und sogar einen POST-Service leicht zu produzieren. In der POST-Methode erhalte ich jedoch ein Null-Objekt. Hier ist was ich habe.

In meinem beans.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:jaxws="http://cxf.apache.org/jaxws" 
xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://cxf.apache.org/jaxrs 
http://cxf.apache.org/schemas/jaxrs.xsd 
http://cxf.apache.org/jaxws 
http://cxf.apache.org/schemas/jaxws.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 

<import resource="classpath:META-INF/cxf/cxf.xml" /> 
<context:component-scan base-package="com.bdproject.*" /> 

<jaxrs:server id="createAccount" address="/createAccount"> 
    <jaxrs:providers> 
     <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" /> 
    </jaxrs:providers> 
    <jaxrs:serviceBeans> 
     <ref bean="ProfileCXFServiceImpl" /> 
    </jaxrs:serviceBeans> 
    <jaxrs:extensionMappings> 
     <entry key="xml" value="application/xml" /> 
     <entry key="json" value="application/json" /> 
    </jaxrs:extensionMappings> 
</jaxrs:server> 

<bean id="ProfileCXFServiceImpl" class="com.bdproject.cxfrestservice.ProfileCXFServiceImpl"/> 

Dann ist hier mein profileCxf

package com.bdproject.cxfrestservice; 

    import javax.jws.WebService; 
    import javax.ws.rs.Consumes; 
    import javax.ws.rs.POST; 
    import javax.ws.rs.Path; 
    import javax.ws.rs.Produces; 
    import javax.ws.rs.QueryParam; 
    import javax.ws.rs.core.MediaType; 
    import javax.ws.rs.core.Request; 
    import javax.ws.rs.core.Response; 

    /** 
    * 
    * @author lessonslab.com 
    * This is interface for the employee services 
    * 
    */ 
    @Path("/") 
    @WebService(name="createAccount", targetNamespace="") 
    public interface ProfileCXFService 
    { 

     @POST 
     @Path("/createAccount") 
     @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) 
     @Consumes(MediaType.APPLICATION_JSON) 
     public Response createAccount(@QueryParam("CreateAccountRQ") Request createAccountRQ); 

    } 

und meine impl jetzt:

 package com.bdproject.cxfrestservice; 

    import javax.ws.rs.core.Request; 
    import javax.ws.rs.core.Response; 

    public class ProfileCXFServiceImpl implements ProfileCXFService{ 

     @Override 
     public Response createAccount(Request createAccountRQ) { 
     // TODO Auto-generated method stub 
     return null; 
     } 

    } 

Sie können sehen, dass ny impl ziemlich leer ist :)

Ich bin u sing Postbote, der gut funktioniert, wenn ich ein GET mache. Für den Post erhalte ich ein Null-Objekt.

{ 
    "CreateAccountRQ": { 
    "-xsi:noNamespaceSchemaLocation": "schema.xsd", 
    "-xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", 
    "ProfileInformation": { 
     "-ProfileID": "String", 
     "-Name": "String", 
     "-Surname": "text", 
     "Personnal": { 
     "Contacts": { 
      "Contact": [ 
      { 
       "-Type": "String", 
       "-Name": "String", 
       "PhoneContact": { 
       "Description": { 
        "-Value": "4545454554", 
        "-AreaCode": "06", 
        "-OverseaCode": "+33" 
       } 
       } 
      } 
      ] 
     } 
     } 
    }, 
    "AccountInformation": { 
     "emailAddress": "String", 
     "Password": "String" 
    } 
    } 
} 

ich viele Dinge wie versucht:

@POST 
@Path("/createAccount") 
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) 
@Consumes(MediaType.APPLICATION_JSON) 
public Response createAccount(@PathParam("CreateAccountRQ") Request createAccountRQ); 

Wenn ich das Objekt bin Debuggen ich null erhalte, die ein Konto erstellen ziemlich ärgerlich ist :) suchte ich eine Menge zu kommen an diesem Punkt ohne Frage, aber jetzt bin ich für mehrere Stunden für nichts blockiert :(vielleicht wirst du eine globale Sicht haben, um mir zu sagen, dass ich eine beschissene Sache irgendwo als für den Beitrag habe ich keinen Tuto gefunden habe und ich habe alles gemacht wie wir es auf Französisch sagen "a taton" bedeutet "tasten entlang"

Vielen Dank im Voraus und ich hoffe, dass Sie eine einfache Lösung für dieses Problem finden :)

+0

So machte ich einen Fehler. In der Tat: Die create accountMethod muss sein 'öffentliche Antwort createAccount (CreateAccountRQ createAccountRQ);' CreateAccountRQ ist ein Objekt mit einem! @XMLRootElement Ich konnte es mit einem einfachen Objekt arbeiten lassen. Aber mit diesem scheint es, dass ich immer noch null erhalte. Ich setze meine Untersuchung fort – Geoffrey

Antwort

0

Es ist in Ordnung. Ich habe die Lösung gefunden. Tatsächlich entfernte ich den Parameter und änderte den JSON, indem er den ersten Buchstaben im UPPER Fall entfernte und nur was innerhalb CreateAccountRQ nahm