2017-03-06 10 views
0

私はJAVAで初心者です。サービスを作ろうとしています。JAX-RSとHibernateでテストしたい(JPA)ここでは、JAX-RSの情報を別のクラスに送信してオブジェクトUtilisateurを永続化することです.JAのデータベースに新しいオブジェクトを挿入するのと同じエラーが発生する前に、 。スレッド "main"の例外javax.ws.rs.NotAllowedException:HTTP 405メソッドが許可されていない@POSTスレッド "main"の例外javax.ws.rs.NotAllowedException:HTTP 405メソッドが許可されない

ここに私のクラスがあります(私のMAIN、私は私のMAINクラスをテストしています。オブジェクトの永続化を行うサービスクラス、永続化されるObjectクラスであるmy Utilisateurクラス、my web.xmlとmy persistence.xml)。私はつもりでも、コンソールにエラーコードをポストだ:(テストに)

私のメインクラス:

package clientREST; 

import java.io.IOException; 
import java.net.UnknownHostException; 
import javax.ws.rs.client.Client; 
import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.WebTarget; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.UriBuilder; 

import modele.Utilisateur; 

public class ClientMain { 


    public static void main(String[] args) throws UnknownHostException, IOException, Exception { 

     /* String nom = null ; 
     String prenom = null; 
     String pseudo = null;   
     String email = null; 
     String password = null; 
     String message = null;*/ 

     String nom = "Vidal"; 
     String prenom = "Fabrice"; 
     String pseudo = "Doppio"; 
     String email = "[email protected]"; 
     String password = "vfd"; 
     String message; 

     Client client = ClientBuilder.newClient();  
     WebTarget cible = client.target(UriBuilder.fromPath("http://172.17.0.5:8080/creationprofiltestmain/")); 
     WebTarget ciblefinale = cible.path("service"); 
     System.out.println("ok"); 

     Utilisateur util = ciblefinale.queryParam("nom", nom) 
            .queryParam("prenom", prenom) 
            .queryParam("pseudo",pseudo) 
            .queryParam("email", email) 
            .queryParam("password", password) 

        .request(MediaType.APPLICATION_XML).get(Utilisateur.class); 

      System.out.println("ok 2"); 
      message = "Vous venez de créez votre profil Monsieur " +util.getNom()+ "."; 
      System.out.println(message + util.getNom() 
             +util.getPrenom() 
             +util.getPseudo() 
             +util.getEmail() 
             +util.getPassword()); 





    } 

} 

私のサービスクラス:

package composants; 


import javax.persistence.EntityManager; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.QueryParam; 
import javax.ws.rs.core.MediaType; 
import modele.Utilisateur; 
import ressources.FournisseurDePersistance; 

@Path("service") 
public class ServiceCreationProfil { 

    private String nom; 
    private String prenom; 
    private String pseudo; 
    private String email; 
    private String password; 
    private String message; 



    EntityManager em = null; 

    @POST 
    @Consumes(MediaType.APPLICATION_XML) 
    @Produces(MediaType.TEXT_PLAIN) 
    //@Path("/getutil") 
    public Utilisateur getUtil (@QueryParam("nom") String nom, 
           @QueryParam("prenom") String prenom, 
           @QueryParam("pseudo") String pseudo, 
           @QueryParam("email") String email, 
           @QueryParam("password") String password){ 


     Utilisateur util = new Utilisateur (nom, prenom, pseudo, email, password); 

     try { 

     em = FournisseurDePersistance.getInstance().fournir(); 
     em.getTransaction().begin(); 
     em.persist(util); 
     em.getTransaction().commit(); 
     em.close(); 

     } 
     catch (Exception e) { 
      em.getTransaction().rollback(); 
      e.printStackTrace(); 
      System.out.println(e); 
      message = "voila l'erreur :"+e; 
     } 
    // mettre un catch avec un try plus tard 


     return util; 
    } 

    //************************************** GETTERS ET SETTERS ET CONTRUSCTEUR ****************************************************** 


    public ServiceCreationProfil() { 
     super(); 
    } 


    public String getNom() { 
     return nom; 
    } 

    public void setNom(String nom) { 
     this.nom = nom; 
    } 

    public String getPrenom() { 
     return prenom; 
    } 

    public void setPrenom(String prenom) { 
     this.prenom = prenom; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public String getPseudo() { 
     return pseudo; 
    } 

    public void setPseudo(String pseudo) { 
     this.pseudo = pseudo; 
    } 

}

マイUtilisateurクラス(持続することになるもの):

package modele; 

import java.util.ArrayList; 
import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
@Entity 
@Table(name = "UTILISATEUR") 
public class Utilisateur { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id_user; 
    @Column(nullable = false) 
    private String nom; 
    @Column(nullable = false) 
    private String prenom; 
    @Column(nullable = false, unique = true) 
    private String pseudo; 
    @Column(nullable = false, unique = true) 
    private String email; 
    @Column(nullable = false) 
    private String password; 
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) 
    private List<Annonce> annonces = new ArrayList<>(); 

    public Utilisateur() { 
     super(); 
    } 
    //***************************************** TEST *********************************************** 


    //***************************************** TEST *********************************************** 

    public Utilisateur(String nom, String prenom, String pseudo, String email, String password) { 
     super(); 
     this.nom = nom; 
     this.prenom = prenom; 
     this.pseudo = pseudo; 
     this.email = email; 
     this.password = password; 
    } 

    public List<Annonce> getAnnonces() { 
     return annonces; 
    } 

    public void setAnnonces(List<Annonce> annonces) { 
     this.annonces = annonces; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public int getId_user() { 
     return id_user; 
    } 

    public void setId_user(int id_user) { 
     this.id_user = id_user; 
    } 

    public String getPseudo() { 
     return pseudo; 
    } 

    public void setPseudo(String pseudo) { 
     this.pseudo = pseudo; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getNom() { 
     return nom; 
    } 

    public void setNom(String nom) { 
     this.nom = nom; 
    } 

    public String getPrenom() { 
     return prenom; 
    } 

    public void setPrenom(String prenom) { 
     this.prenom = prenom; 
    } 

} 

私のpersistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
      version="2.0"> 
      <persistence-unit name="peuplement" transaction-type="RESOURCE_LOCAL"> 

     <class>modele.Utilisateur</class> 
     <class>modele.Annonce</class> 
     <class>modele.Type_annonce</class> 

     <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> 
     <property name="javax.persistence.jdbc.user" value="derby"/> 
     <property name="javax.persistence.jdbc.password" value="derby"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:derby://172.17.0.2:1530/ppeDB;update=true"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyTenSixDialect"/> 
     <property name="hibernate.max_fetch_depth" value="3"/>  
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

私のweb.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
<display-name>Service REST creation profil</display-name> 
<servlet> 
<servlet-name>Jersey REST Service</servlet-name> 
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
<init-param> 
<param-name>jersey.config.server.provider.packages</param-name> 
<param-value>composants</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>Jersey REST Service</servlet-name> 
<url-pattern>/*</url-pattern> 
</servlet-mapping> 

<persistence-context-ref> 
    <persistence-context-ref-name>peuplement</persistence-context-ref-name> 
    <persistence-unit-name>peuplement</persistence-unit-name> 
    <persistence-context-type>Transaction</persistence-context-type> 
    </persistence-context-ref> 
</web-app> 

エラーコード:

ok 
Exception in thread "main" javax.ws.rs.NotAllowedException: HTTP 405 Method Not Allowed 
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:1023) 
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:819) 
    at org.glassfish.jersey.client.JerseyInvocation.access$700(JerseyInvocation.java:92) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:701) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:697) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:420) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:316) 
    at clientREST.ClientMain.main(ClientMain.java:43) 

私は多くのことを逃した場合、私は申し訳ありませんが、そのフォーラムでは新しいです物事の、本当に残念。 このテストの後、SERVICEとGUIをJSF(xhtml)で接続するためのGUIを作成します。 私は英語ではないことがわかりましたが、そのような間違いには申し訳ありません。

+0

あなたの 'persistence.xml'と' web.xml'は同じです。意味がありません –

+0

私は間違いを犯しました、私は今すぐ変更しよう! – kenb

答えて

2

このエラーは、あなたが/あなたのケースで、それはをGETだサーバ側

上に存在して許可されていない、あなたは要求をプレゼントしようとしていますされているメソッドにリクエストをしようとしていることを意味それはあなたのサービスで宣言されていない

クライアントコード:

....request(MediaType.APPLICATION_XML).get(Utilisateur.class); 

し、あなたのサービスコード:

@POST 
@Consumes(MediaType.APPLICATION_XML) 
@Produces(MediaType.TEXT_PLAIN) 
//@Path("/getutil") 
public Utilisateur getUtil.... 

サービスコードを変更する代わりに@GETを使用してください。 POSTは、ADDのために使用すべきであるとして、あなたがGET、POSTを行うために、クライアントのコードを変更しない場合がありますので、あなたは、間違ってREST動詞を使用している:レコードの

。その場合は@QueryParamを変更する必要があります。 POSTでパラメータが渡される方法ではありません。

これは、answerで、POSTフォームフィールドをrequsetに渡すことができます。

+0

私はその行為に大きな間違いを犯しました。私はこれらのことをすぐに変えようとしています。ありがとう – kenb

関連する問題