4

私はしばらくの間、JAX Restful Service を作成する方法を見つけようとしていました...ここで入手可能なガイドを使用して - Jersey

セクション 2.3.2 で説明したように、以下の依存関係を Maven に追加しました -

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.0</version>
</dependency>

web.xml 内

<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.classnames</param-name>
        <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
    </init-param>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.hms.rs.controller.MyApp</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>

および MyApp.java

public class MyApp extends Application{

     @Override
        public Set<Class<?>> getClasses() {
            return new HashSet<Class<?>>() {{
                // Add your resources.
            System.out.println("From the Myapp...");
                add(Patient.class);
                add(PatientController.class);

            // Add LoggingFilter.
                add(LoggingFilter.class);
            }};
        }
}

患者.java -

@XmlRootElement(name = "Patient")
public class Patient {

    private String patientFName;
    private String patientLName;
    private int patientAge;
    private String patientSex;
    private String patientParentSpouse;
    private String patientQual;
    private String patientOccupation;
    private String patientComments;

    public Patient()
    {
    }

Setters and Getters....

}

PatientController.java -

@Path("/ManagePatient")
public class PatientController {
      @GET
  @Path("/getPatient")
  @Produces(MediaType.APPLICATION_XML)
  public Patient printPatient() {
      System.out.println("Hello.... from the PatientController");
      Patient ptnt = new Patient();
      ptnt.setPatientFName("FirstN");
      ptnt.setPatientLName("LName");
      ptnt.setPatientAge(30);
      ptnt.setPatientSex("M");
      ptnt.setPatientParentSpouse("ParentSpuse");
      ptnt.setPatientQual("engg");
      ptnt.setPatientOccupation("software");
      ptnt.setPatientComments("comments here");

      System.out.println("Patient = " + ptnt);

    //return ptnt.toString();
      return ptnt;
  } 

ブラウザ経由でこれにアクセスしようとすると、@ localhost:8080/HMS_Web/services/ManagePatient/getPatient

私は得ています

javax.servlet.ServletException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/html, type=class com.hms.app.ui.beans.Patient, genericType=class com.hms.app.ui.beans.Patient.

また、ログに以下の警告が表示されます-

WARNING: A provider com.hms.app.ui.beans.Patient registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider com.hms.app.ui.beans.Patient will be ignored. 

Jersey 2.0 が、Jersey ガイドのセクション「8.1.1.2. JAXB ベースの JSON サポート」で説明されているように、JAXB ベースの xml または json サポートをサポートしている場合、プロバイダー エラーが発生する理由がわかりません。

JAX-WS の専門家は、この状況を解決する方法を理解し、指示を与えるのに役立ちますか?

前もって感謝します

4

1 に答える 1

2

ブラウザ経由でサービスにアクセスしているため、PatientController は応答を html としてレンダリングしようとします。これが理由だと思います

javax.servlet.ServletException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/html, type=class com.hms.app.ui.beans.Patient, genericType=class com.hms.app.ui.beans.Patient.

次のようにジャージークライアントAPIを介してサービスを利用してみてください:

WebTarget webTarget = client.target("http://localhost:8080/HMS_Web/services/ManagePatient/getPatient");

Patient patient = webTarget.request(MediaType.APPLICATION_XML_TYPE).get(Patient.class);

警告のために:

WARNING: A provider com.hms.app.ui.beans.Patient registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider com.hms.app.ui.beans.Patient will be ignored. 

削除する必要があると思います:

add(Patient.class);

あなたのMyAppで。患者は単なる POJO であり、リソースでもプロバイダーでもありません。

于 2013-08-05T01:42:10.533 に答える