Java PHP将POSTFIELDS转换为RESTful服务

Java PHP将POSTFIELDS转换为RESTful服务,java,php,xml,web-services,rest,Java,Php,Xml,Web Services,Rest,我正在开发一个项目,在如何使用php curl将数据发布到java restful Web服务方面遇到了一些困难 SQL: DROP DATABASE IF EXISTS POST_TESTE; CREATE DATABASE POST_TESTE; USE POST_TESTE; CREATE TABLE GRAU ( ID_GRAU TINYINT UNSIGNED NOT NULL, DESCRICAO_GRAU VARC

我正在开发一个项目,在如何使用php curl将数据发布到java restful Web服务方面遇到了一些困难

SQL:

DROP DATABASE IF EXISTS POST_TESTE;
CREATE DATABASE POST_TESTE;
USE POST_TESTE;

CREATE TABLE GRAU  (
ID_GRAU             TINYINT         UNSIGNED        NOT NULL,
DESCRICAO_GRAU      VARCHAR(20)     NOT NULL
);

ALTER TABLE GRAU ADD CONSTRAINT PK_GRAU PRIMARY KEY (ID_GRAU);
ALTER TABLE GRAU CHANGE ID_GRAU ID_GRAU TINYINT UNSIGNED NOT NULL AUTO_INCREMENT;

INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('CET');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Graduação');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Mestrado');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Doutoramento');
@Entity
@Table(name = "grau")
@XmlRootElement
@XmlType(propOrder={"idGrau", "descricaoGrau"})
@NamedQueries({
    @NamedQuery(name = "Grau.findAll", query = "SELECT g FROM Grau g"),
    @NamedQuery(name = "Grau.findByIdGrau", query = "SELECT g FROM Grau g WHERE g.idGrau = :idGrau"),
    @NamedQuery(name = "Grau.findByDescricaoGrau", query = "SELECT g FROM Grau g WHERE g.descricaoGrau = :descricaoGrau")})
public class Grau implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_GRAU")
    private Short idGrau;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "DESCRICAO_GRAU")
    private String descricaoGrau;
@Stateless
@Path("entity.grau")
public class GrauFacadeREST extends AbstractFacade<Grau> {

@PersistenceContext(unitName = "TestePU")
private EntityManager em;

public GrauFacadeREST() {
    super(Grau.class);
}

@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Grau entity) {
    super.create(entity);
}

@PUT
@Override
@Consumes({"application/xml", "application/json"})
public void edit(Grau entity) {
    super.edit(entity);
}
<html><body>
<form action="teste.php" method="post">
        <input type="text" name="text1" /></br>
    <input type="submit" value="Submeter" />
</form>
</body></html>
<?php

$var=$_POST['text1'];

$xml = new SimpleXMLElement('<graus/>');
$teste = $xml->addChild('grau');
$teste -> addChild('idGrau', '7');
$teste -> addChild('descricaoGrau', $var);
$teste1 = $xml->addChild('grau');
$teste1 -> addChild('idGrau', '8');
$teste1 -> addChild('descricaoGrau', $var);

//$xml="<graus><grau><idgrau>7</idgrau><descricaograu>asdf</descricaograu></grau><grau><idgrau>8</idgrau><descricaograu>asdf</descricaograu></grau></graus>";

/* $xml = array(
        "idgrau" => '7',
        "descricaograu" => $var,
);
*/

print($xml->asXML());

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/Teste/resources/entity.grau/');
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data=curl_exec($ch); 

if (curl_errno($ch)){
    echo curl_error($ch);
    exit;
}   
var_dump($data);
curl_close($ch);

?>
在Netbeans中,刚刚创建了一个名为“Teste”的web应用程序,然后从数据库中创建了RESTfulWebServices,我在数据库中选择了上面创建的表。创建了两个包,第一个(实体)是与表vars相关的类,第二个(服务)是与提供的服务相关的

因此,我们的消费服务url是http://localhost:8080/Teste/resources/entity.grau

Grau.java:

DROP DATABASE IF EXISTS POST_TESTE;
CREATE DATABASE POST_TESTE;
USE POST_TESTE;

CREATE TABLE GRAU  (
ID_GRAU             TINYINT         UNSIGNED        NOT NULL,
DESCRICAO_GRAU      VARCHAR(20)     NOT NULL
);

ALTER TABLE GRAU ADD CONSTRAINT PK_GRAU PRIMARY KEY (ID_GRAU);
ALTER TABLE GRAU CHANGE ID_GRAU ID_GRAU TINYINT UNSIGNED NOT NULL AUTO_INCREMENT;

INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('CET');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Graduação');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Mestrado');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Doutoramento');
@Entity
@Table(name = "grau")
@XmlRootElement
@XmlType(propOrder={"idGrau", "descricaoGrau"})
@NamedQueries({
    @NamedQuery(name = "Grau.findAll", query = "SELECT g FROM Grau g"),
    @NamedQuery(name = "Grau.findByIdGrau", query = "SELECT g FROM Grau g WHERE g.idGrau = :idGrau"),
    @NamedQuery(name = "Grau.findByDescricaoGrau", query = "SELECT g FROM Grau g WHERE g.descricaoGrau = :descricaoGrau")})
public class Grau implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_GRAU")
    private Short idGrau;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "DESCRICAO_GRAU")
    private String descricaoGrau;
@Stateless
@Path("entity.grau")
public class GrauFacadeREST extends AbstractFacade<Grau> {

@PersistenceContext(unitName = "TestePU")
private EntityManager em;

public GrauFacadeREST() {
    super(Grau.class);
}

@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Grau entity) {
    super.create(entity);
}

@PUT
@Override
@Consumes({"application/xml", "application/json"})
public void edit(Grau entity) {
    super.edit(entity);
}
<html><body>
<form action="teste.php" method="post">
        <input type="text" name="text1" /></br>
    <input type="submit" value="Submeter" />
</form>
</body></html>
<?php

$var=$_POST['text1'];

$xml = new SimpleXMLElement('<graus/>');
$teste = $xml->addChild('grau');
$teste -> addChild('idGrau', '7');
$teste -> addChild('descricaoGrau', $var);
$teste1 = $xml->addChild('grau');
$teste1 -> addChild('idGrau', '8');
$teste1 -> addChild('descricaoGrau', $var);

//$xml="<graus><grau><idgrau>7</idgrau><descricaograu>asdf</descricaograu></grau><grau><idgrau>8</idgrau><descricaograu>asdf</descricaograu></grau></graus>";

/* $xml = array(
        "idgrau" => '7',
        "descricaograu" => $var,
);
*/

print($xml->asXML());

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/Teste/resources/entity.grau/');
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data=curl_exec($ch); 

if (curl_errno($ch)){
    echo curl_error($ch);
    exit;
}   
var_dump($data);
curl_close($ch);

?>
GrauFacadeREST.java:

DROP DATABASE IF EXISTS POST_TESTE;
CREATE DATABASE POST_TESTE;
USE POST_TESTE;

CREATE TABLE GRAU  (
ID_GRAU             TINYINT         UNSIGNED        NOT NULL,
DESCRICAO_GRAU      VARCHAR(20)     NOT NULL
);

ALTER TABLE GRAU ADD CONSTRAINT PK_GRAU PRIMARY KEY (ID_GRAU);
ALTER TABLE GRAU CHANGE ID_GRAU ID_GRAU TINYINT UNSIGNED NOT NULL AUTO_INCREMENT;

INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('CET');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Graduação');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Mestrado');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Doutoramento');
@Entity
@Table(name = "grau")
@XmlRootElement
@XmlType(propOrder={"idGrau", "descricaoGrau"})
@NamedQueries({
    @NamedQuery(name = "Grau.findAll", query = "SELECT g FROM Grau g"),
    @NamedQuery(name = "Grau.findByIdGrau", query = "SELECT g FROM Grau g WHERE g.idGrau = :idGrau"),
    @NamedQuery(name = "Grau.findByDescricaoGrau", query = "SELECT g FROM Grau g WHERE g.descricaoGrau = :descricaoGrau")})
public class Grau implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_GRAU")
    private Short idGrau;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "DESCRICAO_GRAU")
    private String descricaoGrau;
@Stateless
@Path("entity.grau")
public class GrauFacadeREST extends AbstractFacade<Grau> {

@PersistenceContext(unitName = "TestePU")
private EntityManager em;

public GrauFacadeREST() {
    super(Grau.class);
}

@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Grau entity) {
    super.create(entity);
}

@PUT
@Override
@Consumes({"application/xml", "application/json"})
public void edit(Grau entity) {
    super.edit(entity);
}
<html><body>
<form action="teste.php" method="post">
        <input type="text" name="text1" /></br>
    <input type="submit" value="Submeter" />
</form>
</body></html>
<?php

$var=$_POST['text1'];

$xml = new SimpleXMLElement('<graus/>');
$teste = $xml->addChild('grau');
$teste -> addChild('idGrau', '7');
$teste -> addChild('descricaoGrau', $var);
$teste1 = $xml->addChild('grau');
$teste1 -> addChild('idGrau', '8');
$teste1 -> addChild('descricaoGrau', $var);

//$xml="<graus><grau><idgrau>7</idgrau><descricaograu>asdf</descricaograu></grau><grau><idgrau>8</idgrau><descricaograu>asdf</descricaograu></grau></graus>";

/* $xml = array(
        "idgrau" => '7',
        "descricaograu" => $var,
);
*/

print($xml->asXML());

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/Teste/resources/entity.grau/');
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data=curl_exec($ch); 

if (curl_errno($ch)){
    echo curl_error($ch);
    exit;
}   
var_dump($data);
curl_close($ch);

?>
@无状态
@路径(“entity.grau”)
公共类GrauFacadeREST扩展了AbstractFacade{
@PersistenceContext(unitName=“TestePU”)
私人实体管理者;
公共GrauFacadeREST(){
超级(普通班);
}
@职位
@凌驾
@使用({“application/xml”、“application/json”})
公共无效创建(Grau实体){
超级创建(实体);
}
@放
@凌驾
@使用({“application/xml”、“application/json”})
公共作废编辑(Grau实体){
超级编辑(实体);
}
开发了更多的服务,比如GET、DELETE服务,但我只想了解这两个

我开发了一个基本的html,其中包含一个输入文本,将数据发布到a.php,该.php的目标是捕获信息并将其发布到,例如,create方法,以向表中添加新的grau

teste.html:

DROP DATABASE IF EXISTS POST_TESTE;
CREATE DATABASE POST_TESTE;
USE POST_TESTE;

CREATE TABLE GRAU  (
ID_GRAU             TINYINT         UNSIGNED        NOT NULL,
DESCRICAO_GRAU      VARCHAR(20)     NOT NULL
);

ALTER TABLE GRAU ADD CONSTRAINT PK_GRAU PRIMARY KEY (ID_GRAU);
ALTER TABLE GRAU CHANGE ID_GRAU ID_GRAU TINYINT UNSIGNED NOT NULL AUTO_INCREMENT;

INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('CET');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Graduação');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Mestrado');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Doutoramento');
@Entity
@Table(name = "grau")
@XmlRootElement
@XmlType(propOrder={"idGrau", "descricaoGrau"})
@NamedQueries({
    @NamedQuery(name = "Grau.findAll", query = "SELECT g FROM Grau g"),
    @NamedQuery(name = "Grau.findByIdGrau", query = "SELECT g FROM Grau g WHERE g.idGrau = :idGrau"),
    @NamedQuery(name = "Grau.findByDescricaoGrau", query = "SELECT g FROM Grau g WHERE g.descricaoGrau = :descricaoGrau")})
public class Grau implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_GRAU")
    private Short idGrau;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "DESCRICAO_GRAU")
    private String descricaoGrau;
@Stateless
@Path("entity.grau")
public class GrauFacadeREST extends AbstractFacade<Grau> {

@PersistenceContext(unitName = "TestePU")
private EntityManager em;

public GrauFacadeREST() {
    super(Grau.class);
}

@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Grau entity) {
    super.create(entity);
}

@PUT
@Override
@Consumes({"application/xml", "application/json"})
public void edit(Grau entity) {
    super.edit(entity);
}
<html><body>
<form action="teste.php" method="post">
        <input type="text" name="text1" /></br>
    <input type="submit" value="Submeter" />
</form>
</body></html>
<?php

$var=$_POST['text1'];

$xml = new SimpleXMLElement('<graus/>');
$teste = $xml->addChild('grau');
$teste -> addChild('idGrau', '7');
$teste -> addChild('descricaoGrau', $var);
$teste1 = $xml->addChild('grau');
$teste1 -> addChild('idGrau', '8');
$teste1 -> addChild('descricaoGrau', $var);

//$xml="<graus><grau><idgrau>7</idgrau><descricaograu>asdf</descricaograu></grau><grau><idgrau>8</idgrau><descricaograu>asdf</descricaograu></grau></graus>";

/* $xml = array(
        "idgrau" => '7',
        "descricaograu" => $var,
);
*/

print($xml->asXML());

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/Teste/resources/entity.grau/');
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data=curl_exec($ch); 

if (curl_errno($ch)){
    echo curl_error($ch);
    exit;
}   
var_dump($data);
curl_close($ch);

?>


teste.php:

DROP DATABASE IF EXISTS POST_TESTE;
CREATE DATABASE POST_TESTE;
USE POST_TESTE;

CREATE TABLE GRAU  (
ID_GRAU             TINYINT         UNSIGNED        NOT NULL,
DESCRICAO_GRAU      VARCHAR(20)     NOT NULL
);

ALTER TABLE GRAU ADD CONSTRAINT PK_GRAU PRIMARY KEY (ID_GRAU);
ALTER TABLE GRAU CHANGE ID_GRAU ID_GRAU TINYINT UNSIGNED NOT NULL AUTO_INCREMENT;

INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('CET');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Licenciatura');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Pós-Graduação');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Mestrado');
INSERT INTO GRAU (DESCRICAO_GRAU) VALUES ('Doutoramento');
@Entity
@Table(name = "grau")
@XmlRootElement
@XmlType(propOrder={"idGrau", "descricaoGrau"})
@NamedQueries({
    @NamedQuery(name = "Grau.findAll", query = "SELECT g FROM Grau g"),
    @NamedQuery(name = "Grau.findByIdGrau", query = "SELECT g FROM Grau g WHERE g.idGrau = :idGrau"),
    @NamedQuery(name = "Grau.findByDescricaoGrau", query = "SELECT g FROM Grau g WHERE g.descricaoGrau = :descricaoGrau")})
public class Grau implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_GRAU")
    private Short idGrau;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "DESCRICAO_GRAU")
    private String descricaoGrau;
@Stateless
@Path("entity.grau")
public class GrauFacadeREST extends AbstractFacade<Grau> {

@PersistenceContext(unitName = "TestePU")
private EntityManager em;

public GrauFacadeREST() {
    super(Grau.class);
}

@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Grau entity) {
    super.create(entity);
}

@PUT
@Override
@Consumes({"application/xml", "application/json"})
public void edit(Grau entity) {
    super.edit(entity);
}
<html><body>
<form action="teste.php" method="post">
        <input type="text" name="text1" /></br>
    <input type="submit" value="Submeter" />
</form>
</body></html>
<?php

$var=$_POST['text1'];

$xml = new SimpleXMLElement('<graus/>');
$teste = $xml->addChild('grau');
$teste -> addChild('idGrau', '7');
$teste -> addChild('descricaoGrau', $var);
$teste1 = $xml->addChild('grau');
$teste1 -> addChild('idGrau', '8');
$teste1 -> addChild('descricaoGrau', $var);

//$xml="<graus><grau><idgrau>7</idgrau><descricaograu>asdf</descricaograu></grau><grau><idgrau>8</idgrau><descricaograu>asdf</descricaograu></grau></graus>";

/* $xml = array(
        "idgrau" => '7',
        "descricaograu" => $var,
);
*/

print($xml->asXML());

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/Teste/resources/entity.grau/');
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data=curl_exec($ch); 

if (curl_errno($ch)){
    echo curl_error($ch);
    exit;
}   
var_dump($data);
curl_close($ch);

?>

我尝试过不同的方法来改变发送的postfields,在postfields中注入数组,等等,仍然说同样的错误:

HTTP状态400-错误请求 客户端发送的请求语法不正确(请求错误)

当用户使用findAll()方法时,这是通过.php开发的响应xml


1.
大学英语等级考试
2.
本硕连读
3.
Pós-Licensicatura
4.
Pós-Graduaço
5.
梅斯特拉多
6.
杜托拉门托

如果有人能帮助我,我将不胜感激,因为我已经浪费了很多时间尝试这一点,但仍然不知道如何做。

如果直接在浏览器中运行webserive url,会得到什么?xml丢失了吗?如果我运行http://localhost:8080/Teste/resources/entity.grau,则响应与运行提供上述xml的.php相同。不需要,因为如果您检查元素,您可以在那里看到它。->尝试将内容长度添加到curl“content length:”的头选项中。strlen($xml)@GBD不起作用,给出了Grizzly/1.9.46错误的请求