{"id":300,"date":"2011-07-01T02:43:15","date_gmt":"2011-06-30T17:43:15","guid":{"rendered":"http:\/\/www.typea.info\/blog\/index.php\/2011\/07\/01\/springsource_tool_suite_apache_cxf_rest\/"},"modified":"2011-07-01T02:43:15","modified_gmt":"2011-06-30T17:43:15","slug":"springsource_tool_suite_apache_cxf_rest","status":"publish","type":"post","link":"https:\/\/www.typea.info\/blog\/index.php\/2011\/07\/01\/springsource_tool_suite_apache_cxf_rest\/","title":{"rendered":"SpringSource Tool Suite \u3092\u4f7f\u3063\u3066 Apache CXF \u306b\u3088\u308b REST \u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u6210\u3059\u308b"},"content":{"rendered":"<p>NetBeans\u306e\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u3067\u3042\u308c\u3070\u3001\u3082\u306e\u306e\u6570\u5206\u3067\u3001RESTful \u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u3067\u304d\u3042\u304c\u308b\u3068\u3053\u308d\u306a\u306e\u3060\u304c\u3001\u306f\u307e\u308b\u30dd\u30a4\u30f3\u30c8\u304c\u76db\u308a\u3060\u304f\u3055\u3093\u3002\u3002\u3002\u4f55\u3068\u304b\u52d5\u304b\u305b\u308b\u3088\u3046\u306b\u306a\u308b\u307e\u3067\u3001\u8db3\u304b\u30512\u65e5\u3082\u304b\u304b\u3063\u3066\u3057\u307e\u3063\u305f\u3002<\/p>\n<h2>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210<\/h2>\n<p>\u307e\u305a\u3001Spring Template Project \u306e Spring MVC \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304b\u3089\u3001Spring MVC \u3092\u5916\u3057\u3066\u3001Apache CXF \u3092\u5165\u308c\u8fbc\u3080\u3068\u3044\u3046\u624b\u9806\u3092\u8e0f\u3080\u3053\u3068\u306b\u3057\u305f\u3002<\/p>\n<p>\u3068\u3044\u3046\u306e\u306f\u3001\u9069\u5f53\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u306a\u304f\u3066\u3001Maven \u306e\u7d44\u307f\u8fbc\u307f\u3068\u304b\u8003\u3048\u308b\u3068\u3088\u304f\u308f\u304b\u3089\u306a\u3044\u306e\u3067\u3001Spring MVC\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304b\u3089\u4e0d\u8981\u306a\u3082\u306e\u3092\u524a\u308b\u306e\u304c\u65e9\u3044\u306e\u304b\u306a\u3041\u3068\u3002<\/p>\n<h2>Maven\u4f9d\u5b58\u95a2\u4fc2\u306e\u8a2d\u5b9a<\/h2>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2011\/05\/16\/springsource_tool_suitests\">\u307e\u305a\u3001Spring MVC \u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210<\/a> \u3057\u3066\u3001pom.xml \u3092\u3044\u3058\u304f\u308b\u3002<\/p>\n<p>\u57fa\u672c\u7684\u306b\u3001\u4ee5\u4e0b\u306e\u30b5\u30a4\u30c8\u3092\u53c2\u8003\u306b\u3055\u305b\u3066\u3082\u3089\u3044\u307e\u3057\u305f\u3002<\/p>\n<ul>\n<li><a href=\"http:\/\/opensquare.jp\/blog\/?p=1108\">Apache CXF+Spring\u306b\u3088\u308bWeb\u30b5\u30fc\u30d3\u30b9\u958b\u767a\uff08JAX-RS\u7de8\uff09<\/a> <\/li>\n<li><a href=\"http:\/\/cxf.apache.org\/docs\/jax-rs.html\">Apache CXF JAX-RS(JSR-311)<\/a> <\/li>\n<\/ul>\n<p>dependencies \u8981\u7d20\u306b\u3001\u4ee5\u4e0b\u3092\u8ffd\u52a0\u3002<a href=\"https:\/\/www.typea.info\/blog\/index.php\/2011\/06\/25\/spring_mvc_apache_derby_jpa\">Derby \u3068 JPA \u3092\u4f7f\u3063\u3066<\/a>\u3001XML\u3092\u8fd4\u3059\u3068\u3053\u308d\u307e\u3067\u3092\u4eca\u56de\u306f\u76ee\u6307\u3059\u3002<\/p>\n<pre class=\"prettyprint linenums\"> &lt;!-- TODO Apache CXF --&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.apache.cxf&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;cxf-rt-frontend-jaxrs&lt;\/artifactId&gt;\r\n        &lt;version&gt;${cxf.version}&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.apache.cxf&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;cxf-rt-transports-http&lt;\/artifactId&gt;\r\n     &lt;version&gt;${cxf.version}&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.apache.cxf&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;cxf-rt-databinding-aegis&lt;\/artifactId&gt;\r\n     &lt;version&gt;${cxf.version}&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n\r\n &lt;!-- TODO Derby --&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.apache.derby&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;derbyLocale_ja_JP&lt;\/artifactId&gt;\r\n     &lt;version&gt;10.8.1.2&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n\r\n &lt;!-- TODO JPA  --&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;javax.persistence&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;persistence-api&lt;\/artifactId&gt;\r\n     &lt;version&gt;1.0&lt;\/version&gt;\r\n &lt;\/dependency&gt;        \r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.eclipse.persistence&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;eclipselink&lt;\/artifactId&gt;\r\n     &lt;version&gt;2.2.0&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;spring-orm&lt;\/artifactId&gt;\r\n     &lt;version&gt;3.0.0.RELEASE&lt;\/version&gt;\r\n &lt;\/dependency&gt;            \r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;spring-aop&lt;\/artifactId&gt;\r\n     &lt;version&gt;3.0.0.RELEASE&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;spring-instrument&lt;\/artifactId&gt;\r\n     &lt;version&gt;3.0.0.RELEASE&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;commons-dbcp&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;commons-dbcp&lt;\/artifactId&gt;\r\n     &lt;version&gt;1.2.2&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;org.aspectj&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;aspectjweaver&lt;\/artifactId&gt;\r\n     &lt;version&gt;1.5.4&lt;\/version&gt;\r\n &lt;\/dependency&gt;\r\n &lt;dependency&gt;\r\n     &lt;groupId&gt;cglib&lt;\/groupId&gt;\r\n     &lt;artifactId&gt;cglib-nodep&lt;\/artifactId&gt;\r\n     &lt;version&gt;2.1_3&lt;\/version&gt;\r\n &lt;\/dependency&gt;<\/pre>\n<p>repositories \u914d\u4e0b\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0<\/p>\n<pre class=\"prettyprint linenums\"> &lt;!-- TODO JPA --&gt;\r\n &lt;repository&gt;\r\n     &lt;id&gt;EclipseLink Repo&lt;\/id&gt;\r\n     &lt;url&gt;http:\/\/www.eclipse.org\/downloads\/download.php?r=1&amp;amp;nf=1&amp;amp;file=\/rt\/eclipselink\/maven.repo&lt;\/url&gt;\r\n     &lt;snapshots&gt;&lt;enabled&gt;false&lt;\/enabled&gt;&lt;\/snapshots&gt;\r\n &lt;\/repository&gt;<\/pre>\n<h2>Entity \u306e\u4f5c\u6210<\/h2>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2011\/06\/25\/springsource_tool_suite_db_apache_derby\">Derby \u306e\u30c7\u30e2\u30c7\u30fc\u30bf toursDB \u304b\u3089 CITIES \u30c6\u30fc\u30d6\u30eb\u3068\u3001COUNTRIES \u3092\u53d6\u5f97\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u3092\u3064\u304f\u3063\u3066\u307f\u308b<\/a>\u3002<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2011\/06\/25\/spring_mvc_apache_derby_jpa\"><strong>Spring MVC \u304b\u3089 Apache Derby \u3092 JPA\u7d4c\u7531\u3067\u4f7f\u7528\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210<\/strong><\/a><\/p>\n<p>\u3042\u305f\u308a\u3092\u53c2\u8003\u306b\u3001\u4e0a\u8a18\u30c6\u30fc\u30d6\u30eb\u306b\u5bfe\u5fdc\u3059\u308b\u4ee5\u4e0b\u306e Entity \u30af\u30e9\u30b9\u3092\u81ea\u52d5\u751f\u6210\u3002<\/p>\n<h3>City \u30af\u30e9\u30b9<\/h3>\n<ul>\n<li>@XmlRootElement \u306f\u3001JAXB \u306b\u3066\u3001XML \u306b\u5909\u63db\u3055\u305b\u308b\u305f\u3081\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3 <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.entity;\r\n\r\nimport java.io.Serializable;\r\nimport javax.persistence.Column;\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.Id;\r\nimport javax.persistence.JoinColumn;\r\nimport javax.persistence.ManyToOne;\r\nimport javax.persistence.Table;\r\nimport javax.xml.bind.annotation.XmlRootElement;\r\n\r\n@XmlRootElement(name=&quot;city&quot;)\r\n@Entity\r\n@Table(name=&quot;CITIES&quot;)\r\npublic class City implements Serializable {\r\n    private static final long serialVersionUID = 1L;\r\n\r\n    @Id\r\n    @Column(name=&quot;CITY_ID&quot;)\r\n    private int cityId;\r\n\r\n    private String airport;\r\n\r\n    @Column(name=&quot;CITY_NAME&quot;)\r\n    private String cityName;\r\n\r\n    private String country;\r\n\r\n    private String language;\r\n\r\n    \/\/bi-directional many-to-one association to Country\r\n    @ManyToOne\r\n    @JoinColumn(name=&quot;COUNTRY_ISO_CODE&quot;)\r\n    private Country countryBean;\r\n\r\n    public City() {\r\n    }\r\n    public int getCityId() {\r\n        return this.cityId;\r\n    }\r\n    public void setCityId(int cityId) {\r\n        this.cityId = cityId;\r\n    }\r\n    public String getAirport() {\r\n        return this.airport;\r\n    }\r\n    public void setAirport(String airport) {\r\n        this.airport = airport;\r\n    }\r\n    public String getCityName() {\r\n        return this.cityName;\r\n    }\r\n    public void setCityName(String cityName) {\r\n        this.cityName = cityName;\r\n    }\r\n    public String getCountry() {\r\n        return this.country;\r\n    }\r\n    public void setCountry(String country) {\r\n        this.country = country;\r\n    }\r\n    public String getLanguage() {\r\n        return this.language;\r\n    }\r\n    public void setLanguage(String language) {\r\n        this.language = language;\r\n    }\r\n    public Country getCountryBean() {\r\n        return this.countryBean;\r\n    }\r\n    public void setCountryBean(Country countryBean) {\r\n        this.countryBean = countryBean;\r\n    }\r\n}<\/pre>\n<h3>Country.java<\/h3>\n<ul>\n<li>@XmlTransient \u306f\u3001JAXB\u306b\u3066\u3001XML\u306b\u5909\u63db\u3059\u308b\u3068\u304d\u306b\u7121\u8996\u3055\u305b\u308b\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3002\u5faa\u74b0\u53c2\u7167\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u3001\u5b9f\u884c\u6642\u4f8b\u5916\u3068\u306a\u308b\u3002 <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.entity;\r\n\r\nimport java.io.Serializable;\r\nimport java.util.Set;\r\nimport javax.persistence.Column;\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.Id;\r\nimport javax.persistence.OneToMany;\r\nimport javax.persistence.Table;\r\nimport javax.xml.bind.annotation.XmlRootElement;\r\nimport javax.xml.bind.annotation.XmlTransient;\r\n\r\n@XmlRootElement(name=&quot;country&quot;)\r\n@Entity\r\n@Table(name=&quot;COUNTRIES&quot;)\r\npublic class Country implements Serializable {\r\n    private static final long serialVersionUID = 1L;\r\n\r\n    @Id\r\n    @Column(name=&quot;COUNTRY_ISO_CODE&quot;)\r\n\r\n    private String countryIsoCode;\r\n\r\n    private String country;\r\n\r\n    private String region;\r\n\r\n    \/\/bi-directional many-to-one association to City\r\n    @OneToMany(mappedBy=&quot;countryBean&quot;)\r\n    private Set<city> cities;\r\n\r\n    public Country() {\r\n    }\r\n    public String getCountryIsoCode() {\r\n        return this.countryIsoCode;\r\n    }\r\n    public void setCountryIsoCode(String countryIsoCode) {\r\n        this.countryIsoCode = countryIsoCode;\r\n    }\r\n    public String getCountry() {\r\n        return this.country;\r\n    }\r\n    public void setCountry(String country) {\r\n        this.country = country;\r\n    }\r\n    public String getRegion() {\r\n        return this.region;\r\n    }\r\n    public void setRegion(String region) {\r\n        this.region = region;\r\n    }\r\n    @XmlTransient\r\n    public Set<city> getCities() {\r\n        return this.cities;\r\n    }\r\n    \r\n    public void setCities(Set<city> cities) {\r\n        this.cities = cities;\r\n    }\r\n    \r\n}<\/pre>\n<h3>Cities.java<\/h3>\n<ul>\n<li>\u5bfe\u5fdc\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u306f\u306a\u3044\u304c\u3001City \u3092\u307e\u3068\u3081\u3066 XML \u3068\u3059\u308b\u305f\u3081\u306e\u30af\u30e9\u30b9\u3092\u7528\u610f\u3057\u3066\u304a\u304f\u3002 <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.entity;\r\nimport java.util.List;\r\nimport javax.xml.bind.annotation.XmlRootElement;\r\n@XmlRootElement(name=&quot;cities&quot;)\r\npublic class Cities {\r\n    private List<city> cities;\r\n    \r\n    public Cities() {\r\n    }\r\n    \r\n    public Cities(List<city> cities) {\r\n        this.cities = cities;\r\n    }\r\n    public List<city> getCities() {\r\n        return cities;\r\n    }\r\n    public void setCities(List<city> cities) {\r\n        this.cities = cities;\r\n    }\r\n}<\/pre>\n<h2>DAO\u306e\u4f5c\u6210<\/h2>\n<p>\u4e0a\u8a18\u306e City \u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306eDAO\u3092\u4f5c\u6210\u3002<\/p>\n<h3>CityDao.java (\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9)<\/h3>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.dao;\r\n\r\nimport info.typea.sample.restservice.entity.City;\r\n\r\nimport java.util.List;\r\n\r\npublic interface CityDao {\r\n    public City findById(String cityId);\r\n    public List<city> findAll();\r\n}<\/pre>\n<p>&#160;<\/p>\n<h3>CityDaoImpl.java (\u5b9f\u88c5\u30af\u30e9\u30b9)<\/h3>\n<ul>\n<li>\u201ctoursdb_persistence_unit\u201d \u306f\u3001\u6c38\u7d9a\u5316\u30e6\u30cb\u30c3\u30c8\u540d\u3002persistence.xml \u306b\u3066\u6307\u5b9a\u3059\u308b <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.dao;\r\n\r\nimport info.typea.sample.restservice.entity.City;\r\n\r\nimport java.util.List;\r\n\r\nimport javax.persistence.EntityManager;\r\nimport javax.persistence.EntityManagerFactory;\r\nimport javax.persistence.Persistence;\r\nimport javax.persistence.Query;\r\n\r\npublic class CityDaoImpl implements CityDao {\r\n\r\n    public City findById(String cityId) {\r\n        EntityManagerFactory emf = Persistence.createEntityManagerFactory(&quot;toursdb_persistence_unit&quot;);\r\n        EntityManager em = emf.createEntityManager();\r\n\r\n        Query query = em.createQuery(&quot;select c from City c where c.cityId = :cityId&quot;);\r\n        query.setParameter(&quot;cityId&quot;, Integer.parseInt(cityId));\r\n\r\n        return (City)query.getSingleResult();\r\n    }\r\n\r\n    public List<city> findAll() {\r\n        EntityManagerFactory emf = Persistence.createEntityManagerFactory(&quot;toursdb_persistence_unit&quot;);\r\n        EntityManager em = emf.createEntityManager();\r\n\r\n        @SuppressWarnings(&quot;unchecked&quot;)\r\n        List&lt;city&gt; list = em.createQuery(&quot;select c from City c&quot;).getResultList();\r\n        return list;\r\n    }\r\n}<\/pre>\n<h2>\u30b5\u30fc\u30d3\u30b9\u306e\u4f5c\u6210<\/h2>\n<p>REST \u30b5\u30fc\u30d3\u30b9\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f5c\u6210<\/p>\n<h3>CityResource.java (\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9)<\/h3>\n<ul>\n<li>\/{\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d}\/city\/{city id} \u3067 city id \u306b\u4e00\u81f4\u3059\u308b\u60c5\u5831\u3092\u53d6\u5f97 <\/li>\n<li>\/{\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d}\/city\/all \u3067\u3059\u3079\u3066\u306e\u60c5\u5831\u3092\u53d6\u5f97 <\/li>\n<li>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b\u30a2\u30ce\u30c6\u30fc\u30c8\u3057\u3066\u304a\u3051\u3070\u3001\u5b9f\u88c5\u30af\u30e9\u30b9\u306b\u3082\u52b9\u304f <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.rs;\r\n\r\nimport info.typea.sample.restservice.entity.Cities;\r\nimport info.typea.sample.restservice.entity.City;\r\n\r\nimport javax.ws.rs.GET;\r\nimport javax.ws.rs.Path;\r\nimport javax.ws.rs.PathParam;\r\nimport javax.ws.rs.Produces;\r\n\r\n@Path(&quot;\/city&quot;)\r\npublic interface CityResource {\r\n\r\n    @GET\r\n    @Path(&quot;\/{cityId}&quot;)\r\n    @Produces(&quot;{application\/xml}&quot;)\r\n    public City getCity(@PathParam(&quot;cityId&quot;) String cityId);\r\n    \r\n    @GET\r\n    @Path(&quot;\/all&quot;)\r\n    @Produces(&quot;{application\/xml}&quot;)\r\n    public Cities getCities();\r\n}<\/pre>\n<h3>CityResourceImpl.java (\u5b9f\u88c5\u30af\u30e9\u30b9)<\/h3>\n<ul>\n<li>DAO \u306b\u51e6\u7406\u3092\u59d4\u8b72 <\/li>\n<li>DAO\u306e\u30a2\u30af\u30bb\u30c3\u30b5\u306f\u3001DI\u7528 <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.rs;\r\nimport info.typea.sample.restservice.dao.CityDao;\r\nimport info.typea.sample.restservice.entity.Cities;\r\nimport info.typea.sample.restservice.entity.City;\r\npublic class CityResourceImpl implements CityResource {\r\n    private CityDao cityDao;\r\n    \r\n    public City getCity(String cityId) {\r\n        return cityDao.findById(cityId);\r\n    }\r\n    public Cities getCities() {\r\n        return new Cities(cityDao.findAll());\r\n    }\r\n    public CityDao getCityDao() {\r\n        return cityDao;\r\n    }\r\n    public void setCityDao(CityDao cityDao) {\r\n        this.cityDao = cityDao;\r\n    }\r\n}<\/pre>\n<h2>\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u4f5c\u6210<\/h2>\n<p>\u4e00\u756a\u306f\u307e\u3063\u305f\u306e\u304c\u3053\u3053\u3002<\/p>\n<p><a href=\"http:\/\/d.hatena.ne.jp\/shin\/20100921\/p3\"><strong>[Java]JAX-RS\u3067\u597d\u304d\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8fd4\u3059<\/strong><\/a><\/p>\n<p>\u3092\u53c2\u8003\u306b\u3001JAXB \u304c\u3001Java \u3092XML\u306b\u5909\u63db\u3059\u308b\u3068\u304d\u306b\u5229\u7528\u3059\u308b\u3001MessageBodyWriter \u3092\u4f5c\u6210\u3059\u308b\u3002<\/p>\n<p>Spring \u306e Bean\u5b9a\u7fa9\u306b\u3066\u3001org.apache.cxf.jaxrs.provider.JAXBElementProvider \u3092\u5229\u7528\u3057\u3066\u3042\u3052\u308c\u3070\u3001@XmlRootElement \u4ed8\u304d\u306e\u30af\u30e9\u30b9\u306f\u81ea\u52d5\u3067XML \u306b\u5909\u63db\u3057\u3066\u304f\u308c\u308b\u3093\u3067\u306f\u306a\u3044\u304b\u3068\u8e0f\u3093\u3067\u3044\u305f\u306e\u3060\u304c\u3001\u3069\u3046\u3082\u610f\u56f3\u3057\u305f\u3068\u304a\u308a\u306b\u52d5\u3044\u3066\u304f\u308c\u306a\u3044\u306e\u3067\u3001\u5bfe\u5fdc\u3059\u308b\u3002<\/p>\n<p>\u305d\u306e\u8fba\u306e\u8a18\u8ff0\u306f\u3001\u3053\u306e\u672c\u306b\u7d50\u69cb\u8a73\u3057\u304f\u66f8\u3044\u3066\u3042\u308b\u306e\u3067\u3001\u5f8c\u307b\u3069\u3058\u3063\u304f\u308a\u691c\u8a3c\u3059\u308b\u3053\u3068\u3068\u3057\u3066\u304a\u304d(\u975e\u5e38\u306b\u308f\u304b\u308a\u3084\u3059\u3044\u826f\u66f8)\u3001\u3068\u308a\u3042\u3048\u305a\u52d5\u304f\u7a0b\u5ea6\u306e\u30b3\u30fc\u30c9\u3067\u5148\u306b\u9032\u3080\u3002<\/p>\n<p><iframe style=\"width: 120px; height: 240px\" marginheight=\"0\" src=\"http:\/\/rcm-jp.amazon.co.jp\/e\/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=typea09-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4873114675\" frameborder=\"0\" marginwidth=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<h3>CityWriter.java<\/h3>\n<ul>\n<li>JAXBContext \u306e\u521d\u671f\u5316\u306b\u30b3\u30b9\u30c8\u304c\u304b\u304b\u308b\u307f\u305f\u3044\u306a\u306e\u3067\u3001DI\u3059\u308b\u3088\u3046\u306b\u3059\u308b <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.provider;\r\n\r\nimport info.typea.sample.restservice.entity.City;\r\n\r\nimport java.io.IOException;\r\nimport java.io.OutputStream;\r\nimport java.io.OutputStreamWriter;\r\nimport java.io.Writer;\r\nimport java.lang.annotation.Annotation;\r\nimport java.lang.reflect.Type;\r\n\r\nimport javax.ws.rs.WebApplicationException;\r\nimport javax.ws.rs.core.MediaType;\r\nimport javax.ws.rs.core.MultivaluedMap;\r\nimport javax.ws.rs.ext.MessageBodyWriter;\r\nimport javax.ws.rs.ext.Provider;\r\nimport javax.xml.bind.JAXBContext;\r\nimport javax.xml.bind.JAXBException;\r\nimport javax.xml.bind.Marshaller;\r\n\r\n@Provider\r\npublic class CityWriter implements MessageBodyWriter&lt;City&gt; {\r\n    private JAXBContext jaxbContext;\r\n    \r\n    public long getSize(City city, \r\n            Class&lt;?&gt; type, \r\n            Type genericType,  \r\n            Annotation[] annotation, \r\n            MediaType mediaType) {\r\n        return -1;\r\n    }\r\n\r\n    public boolean isWriteable(Class&lt;?&gt; type, \r\n            Type genericType, \r\n            Annotation[] annotation, \r\n            MediaType mediaType) {\r\n        \r\n        return type.equals(City.class);\r\n    }\r\n\r\n    public void writeTo(City city, Class&lt;?&gt; type, \r\n            Type genericType, \r\n            Annotation[] annotation, \r\n            MediaType mediaType, \r\n            MultivaluedMap&lt;String, Object&gt; httpHeaders,\r\n            OutputStream entityStream) throws IOException, WebApplicationException {\r\n        \r\n        try {\r\n            httpHeaders.add(&quot;Content-Type&quot;, &quot;application\/xml&quot;);\r\n            Writer writer = new OutputStreamWriter(entityStream, &quot;UTF-8&quot;);\r\n\r\n            Marshaller mshr = jaxbContext.createMarshaller();\r\n            mshr.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);\r\n            mshr.marshal(city, writer);\r\n            \r\n        } catch (JAXBException e) {\r\n            \/\/ TODO Auto-generated catch block\r\n            e.printStackTrace();\r\n        }\r\n    }\r\n\r\n    public JAXBContext getJaxbContext() {\r\n        return jaxbContext;\r\n    }\r\n    public void setJaxbContext(JAXBContext jaxbContext) {\r\n        this.jaxbContext = jaxbContext;\r\n    }\r\n}<\/pre>\n<h3>CitiesWriter.java<\/h3>\n<pre class=\"prettyprint linenums\">package info.typea.sample.restservice.provider;\r\n\r\nimport info.typea.sample.restservice.entity.Cities;\r\n\r\nimport java.io.IOException;\r\nimport java.io.OutputStream;\r\nimport java.io.OutputStreamWriter;\r\nimport java.io.Writer;\r\nimport java.lang.annotation.Annotation;\r\nimport java.lang.reflect.Type;\r\n\r\nimport javax.ws.rs.WebApplicationException;\r\nimport javax.ws.rs.core.MediaType;\r\nimport javax.ws.rs.core.MultivaluedMap;\r\nimport javax.ws.rs.ext.MessageBodyWriter;\r\nimport javax.ws.rs.ext.Provider;\r\nimport javax.xml.bind.JAXBContext;\r\nimport javax.xml.bind.JAXBException;\r\nimport javax.xml.bind.Marshaller;\r\n\r\n@Provider\r\npublic class CitiesWriter implements MessageBodyWriter&lt;Cities&gt; {\r\n    private JAXBContext jaxbContext;\r\n    \r\n    public long getSize(Cities cities, \r\n            Class&lt;?&gt; type, \r\n            Type genericType,  \r\n            Annotation[] annotation, \r\n            MediaType mediaType) {\r\n        return -1;\r\n    }\r\n\r\n    public boolean isWriteable(Class&lt;?&gt; type, \r\n            Type genericType, \r\n            Annotation[] annotation, \r\n            MediaType mediaType) {\r\n        \r\n        return type.equals(Cities.class);\r\n    }\r\n\r\n    public void writeTo(Cities cities, Class&lt;?&gt; type, \r\n            Type genericType, \r\n            Annotation[] annotation, \r\n            MediaType mediaType, \r\n            MultivaluedMap&lt;String, Object&gt; httpHeaders,\r\n            OutputStream entityStream) throws IOException, WebApplicationException {\r\n        \r\n        try {\r\n            httpHeaders.add(&quot;Content-Type&quot;, &quot;application\/xml&quot;);\r\n            Writer writer = new OutputStreamWriter(entityStream, &quot;UTF-8&quot;);\r\n\r\n            Marshaller mshr = jaxbContext.createMarshaller();\r\n            mshr.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);\r\n            mshr.marshal(cities, writer);\r\n            \r\n        } catch (JAXBException e) {\r\n            \/\/ TODO Auto-generated catch block\r\n            e.printStackTrace();\r\n        }\r\n    }\r\n    \r\n    public JAXBContext getJaxbContext() {\r\n        return jaxbContext;\r\n    }\r\n    public void setJaxbContext(JAXBContext jaxbContext) {\r\n        this.jaxbContext = jaxbContext;\r\n    }\r\n}<\/pre>\n<h2>\u30af\u30e9\u30b9\u5168\u4f53<\/h2>\n<p>\u4e00\u5fdc\u3053\u308c\u304f\u3089\u3044\u304b\u3002\u5168\u4f53\u306e\u69cb\u6210\u306f\u3053\u3093\u306a\u611f\u3058<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/SpringSourceToolSuiteApacheCXFREST_EC6\/jax_rs01.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"jax_rs01\" border=\"0\" alt=\"jax_rs01\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/SpringSourceToolSuiteApacheCXFREST_EC6\/jax_rs01_thumb.jpg\" width=\"257\" height=\"317\" \/><\/a> <\/p>\n<h2>\u8a2d\u5b9a\u7cfb<\/h2>\n<h3>Web.xml<\/h3>\n<ul>\n<li>Spring MVC \u306e appServlet (org.springframework.web.servlet.DispatcherServlet) \u3092\u524a\u9664\u3057\u3066\u3001\u4ee3\u308f\u308a\u306bCXFServlet \u306e\u8a18\u8ff0\u3092\u8ffd\u52a0 <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\r\n&lt;web-app version=&quot;2.5&quot; xmlns=&quot;http:\/\/java.sun.com\/xml\/ns\/javaee&quot;\r\n    xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\r\n    xsi:schemaLocation=&quot;http:\/\/java.sun.com\/xml\/ns\/javaee http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd&quot;&gt;\r\n\r\n    &lt;!-- The definition of the Root Spring Container shared by all Servlets and Filters --&gt;\r\n    &lt;context-param&gt;\r\n        &lt;param-name&gt;contextConfigLocation&lt;\/param-name&gt;\r\n        &lt;param-value&gt;\/WEB-INF\/spring\/root-context.xml&lt;\/param-value&gt;\r\n    &lt;\/context-param&gt;\r\n    \r\n    &lt;!-- Creates the Spring Container shared by all Servlets and Filters --&gt;\r\n    &lt;listener&gt;\r\n        &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;\/listener-class&gt;\r\n    &lt;\/listener&gt;\r\n\r\n    &lt;servlet&gt;\r\n        &lt;servlet-name&gt;CXFServlet&lt;\/servlet-name&gt;\r\n        &lt;servlet-class&gt;org.apache.cxf.transport.servlet.CXFServlet&lt;\/servlet-class&gt;\r\n        &lt;load-on-startup&gt;1&lt;\/load-on-startup&gt;\r\n    &lt;\/servlet&gt;\r\n\r\n    &lt;servlet-mapping&gt;\r\n        &lt;servlet-name&gt;CXFServlet&lt;\/servlet-name&gt;\r\n        &lt;url-pattern&gt;\/*&lt;\/url-pattern&gt;\r\n    &lt;\/servlet-mapping&gt;\r\n    \r\n&lt;\/web-app&gt;<\/pre>\n<h3>Bean\u5b9a\u7fa9 (root-context.xml)<\/h3>\n<ul>\n<li>JAXBContext \u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u3001\u5bfe\u5fdc\u3059\u308b\u30af\u30e9\u30b9\u3092\u5f15\u6570\u3068\u3057\u3066\u6e21\u3057\u3066\u3042\u3052\u308b\u5fc5\u8981\u304c\u3042\u308b <\/li>\n<li>cxf \u304c\u3089\u307f\u306e import\u3001\u30b5\u30f3\u30d7\u30eb\u306b\u3088\u3063\u3066\u306f\u3044\u308d\u3044\u308d\u306axml\u3092import\u3057\u3066\u3044\u308b\u304c\u3001\u73fe\u5728\u306f\u3053\u308c\u3060\u3051\u3067\u3088\u3055\u305d\u3046 <\/li>\n<li>NG 1.\u3001NG 2. \u3068\u3057\u3066\u30b3\u30e1\u30f3\u30c8\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u306f\u3001MessageBodyWriter\u3092\u3064\u304f\u3089\u305a\u3068\u3082 XML \u5909\u63db\u3067\u304d\u308b\u3060\u308d\u3046\u3068\u8a66\u3057\u305f\u8a2d\u5b9a\u3002\u3067\u304d\u306a\u304b\u3063\u305f\u3002\u3002\u3002 <\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\r\n&lt;beans \r\n    xmlns=&quot;http:\/\/www.springframework.org\/schema\/beans&quot;\r\n    xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\r\n    xmlns:jaxrs=&quot;http:\/\/cxf.apache.org\/jaxrs&quot;\r\n    xmlns:util=&quot;http:\/\/www.springframework.org\/schema\/util&quot;\r\n    xsi:schemaLocation=&quot;http:\/\/www.springframework.org\/schema\/beans \r\n        http:\/\/www.springframework.org\/schema\/beans\/spring-beans-3.0.xsd\r\n        http:\/\/cxf.apache.org\/jaxrs\r\n        http:\/\/cxf.apache.org\/schemas\/jaxrs.xsd\r\n        http:\/\/www.springframework.org\/schema\/util \r\n        http:\/\/www.springframework.org\/schema\/util\/spring-util-2.0.xsd&quot;&gt;\r\n    \r\n    &lt;!-- Root Context: defines shared resources visible to all other web components --&gt;\r\n    &lt;import resource=&quot;classpath:META-INF\/cxf\/cxf.xml&quot; \/&gt;\r\n     \r\n    &lt;jaxrs:server id=&quot;cityResourceService&quot; address=&quot;\/&quot;&gt;\r\n        &lt;jaxrs:serviceBeans&gt;\r\n            &lt;ref bean=&quot;cityResource&quot; \/&gt;\r\n        &lt;\/jaxrs:serviceBeans&gt;\r\n        &lt;jaxrs:providers&gt;\r\n            &lt;ref bean=&quot;cityWriter&quot;\/&gt;\r\n            &lt;ref bean=&quot;citiesWriter&quot;\/&gt;\r\n        &lt;\/jaxrs:providers&gt;\r\n    &lt;\/jaxrs:server&gt;\r\n\r\n    &lt;bean id=&quot;jaxbContext&quot; class=&quot;javax.xml.bind.JAXBContext&quot; factory-method=&quot;newInstance&quot;&gt;\r\n        &lt;constructor-arg&gt;\r\n            &lt;list&gt;\r\n                 &lt;value&gt;info.typea.sample.restservice.entity.City&lt;\/value&gt;\r\n                 &lt;value&gt;info.typea.sample.restservice.entity.Cities&lt;\/value&gt;\r\n            &lt;\/list&gt;\r\n        &lt;\/constructor-arg&gt;\r\n    &lt;\/bean&gt;\r\n    &lt;bean id=&quot;cityDao&quot; class=&quot;info.typea.sample.restservice.dao.CityDaoImpl&quot;\/&gt;\r\n    &lt;bean id=&quot;cityResource&quot; class=&quot;info.typea.sample.restservice.rs.CityResourceImpl&quot;&gt;\r\n        &lt;property name=&quot;cityDao&quot; ref=&quot;cityDao&quot;\/&gt;\r\n    &lt;\/bean&gt; \r\n      &lt;bean id=&quot;cityWriter&quot; class=&quot;info.typea.sample.restservice.provider.CityWriter&quot; &gt;\r\n          &lt;property name=&quot;jaxbContext&quot; ref=&quot;jaxbContext&quot; \/&gt;\r\n      &lt;\/bean&gt;\r\n      &lt;bean id=&quot;citiesWriter&quot; class=&quot;info.typea.sample.restservice.provider.CitiesWriter&quot; &gt;\r\n          &lt;property name=&quot;jaxbContext&quot; ref=&quot;jaxbContext&quot; \/&gt;\r\n      &lt;\/bean&gt;\r\n\r\n    &lt;!-- NG 1. http:\/\/cxf.apache.org\/docs\/jax-rs-data-bindings.html#JAX-RSDataBindings-ConfiguringJAXBprovider\r\n    &lt;bean id=&quot;jaxbProvider&quot; class=&quot;org.apache.cxf.jaxrs.provider.JAXBElementProvider&quot;&gt;\r\n        &lt;property name=&quot;marshallerProperties&quot; ref=&quot;propertiesMap&quot;\/&gt;\r\n    &lt;\/bean&gt;\r\n    &lt;util:map id=&quot;propertiesMap&quot; map-class=&quot;java.util.Hashtable&quot;&gt;\r\n        &lt;entry key=&quot;jaxb.formatted.output&quot;&gt;\r\n            &lt;value type=&quot;java.lang.Boolean&quot;&gt;true&lt;\/value&gt;\r\n        &lt;\/entry&gt;\r\n    &lt;\/util:map&gt; \r\n      --&gt;\r\n    &lt;!-- NG 2. http:\/\/cxf.apache.org\/docs\/jax-rs-data-bindings.html#JAX-RSDataBindings-ConfiguringJAXBprovider    \r\n    &lt;bean id=&quot;jaxb&quot; class=&quot;org.apache.cxf.jaxrs.provider.JAXBElementProvider&quot;&gt;\r\n      &lt;property name=&quot;singleJaxbContext&quot; value=&quot;true&quot;\/&gt;\r\n      &lt;property name=&quot;extraClass&quot;&gt;\r\n         &lt;list&gt;\r\n           &lt;value&gt;info.typea.sample.restservice.entity.City&lt;\/value&gt;\r\n         &lt;\/list&gt;\r\n      &lt;\/property&gt;\r\n    &lt;\/bean&gt;\r\n    --&gt;\r\n&lt;\/beans&gt;<\/pre>\n<h3>persistence.xml<\/h3>\n<ul>\n<li>\u6c38\u7d9a\u5316\u30e6\u30cb\u30c3\u30c8\u540d\u306f\u3053\u3053\u3067\u5b9a\u7fa9<\/li>\n<li>Derby \u306e URL\u3082\u3053\u3053\u3067\u5b9a\u7fa9<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\r\n&lt;persistence version=&quot;2.0&quot; \r\n    xmlns=&quot;http:\/\/java.sun.com\/xml\/ns\/persistence&quot; \r\n    xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot; \r\n    xsi:schemaLocation=&quot;http:\/\/java.sun.com\/xml\/ns\/persistence \r\n    http:\/\/java.sun.com\/xml\/ns\/persistence\/persistence_2_0.xsd&quot;&gt;\r\n    \r\n    &lt;persistence-unit name=&quot;toursdb_persistence_unit&quot; transaction-type=&quot;RESOURCE_LOCAL&quot;&gt;\r\n        &lt;provider&gt;org.eclipse.persistence.jpa.PersistenceProvider&lt;\/provider&gt;\r\n        \r\n        &lt;class&gt;info.typea.sample.restservice.entity.Airline&lt;\/class&gt;\r\n        &lt;class&gt;info.typea.sample.restservice.entity.City&lt;\/class&gt;\r\n        &lt;class&gt;info.typea.sample.restservice.entity.Country&lt;\/class&gt;\r\n        &lt;exclude-unlisted-classes&gt;true&lt;\/exclude-unlisted-classes&gt;\r\n        \r\n           &lt;properties&gt;\r\n            &lt;property name=&quot;eclipselink.logging.level&quot; value=&quot;FINEST&quot;\/&gt; \r\n            &lt;property name=&quot;eclipselink.target-database&quot; value=&quot;Derby&quot; \/&gt;\r\n          \r\n              &lt;!-- transaction-type=&quot;RESOURCE_LOCAL&quot; --&gt;\r\n            &lt;property name=&quot;javax.persistence.jdbc.driver&quot; value=&quot;org.apache.derby.jdbc.EmbeddedDriver&quot; \/&gt;\r\n            &lt;property name=&quot;javax.persistence.jdbc.url&quot;    value=&quot;jdbc:derby:C:\\Users\\piroto\\toursdb&quot; \/&gt;\r\n            &lt;property name=&quot;javax.persistence.jdbc.user&quot; value=&quot;app&quot; \/&gt;\r\n            &lt;property name=&quot;javax.persistence.jdbc.password&quot; value=&quot;&quot; \/&gt;\r\n            &lt;!-- &lt;property name=&quot;eclipselink.ddl-generation&quot; value=&quot;create-tables&quot; \/&gt;  --&gt;\r\n            &lt;property name=&quot;eclipselink.ddl-generation&quot; value=&quot;none&quot; \/&gt;\r\n            &lt;property name=&quot;eclipselink.ddl-generation.output-mode&quot; value=&quot;database&quot; \/&gt;\r\n        &lt;\/properties&gt;\r\n    &lt;\/persistence-unit&gt;\r\n&lt;\/persistence&gt;<\/pre>\n<h3>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u69cb\u6210<\/h3>\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u69cb\u6210\u306f\u3053\u3093\u306a\u611f\u3058<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/SpringSourceToolSuiteApacheCXFREST_EC6\/jax_rs02.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px\" title=\"jax_rs02\" border=\"0\" alt=\"jax_rs02\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/SpringSourceToolSuiteApacheCXFREST_EC6\/jax_rs02_thumb.jpg\" width=\"284\" height=\"273\" \/><\/a> <\/p>\n<h2>\u3044\u3056\u5b9f\u884c<\/h2>\n<p>City ID = 4 \u306e\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3066\u307f\u308b<\/p>\n<p><a href=\"http:\/\/localhost:8080\/sample_rest_service\/city\/4\">http:\/\/localhost:8080\/sample_rest_service\/city\/4<\/a><\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/SpringSourceToolSuiteApacheCXFREST_EC6\/jax_rs03.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px\" title=\"jax_rs03\" border=\"0\" alt=\"jax_rs03\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/SpringSourceToolSuiteApacheCXFREST_EC6\/jax_rs03_thumb.jpg\" width=\"432\" height=\"222\" \/><\/a> <\/p>\n<p>\u3068\u308c\u3066\u304d\u3066\u307e\u3059\uff01<\/p>\n<p><a href=\"http:\/\/localhost:8080\/sample_rest_service\/city\/all\/\">http:\/\/localhost:8080\/sample_rest_service\/city\/all\/<\/a><\/p>\n<p>\u3067\u3001\u3059\u3079\u3066\u53d6\u5f97<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/SpringSourceToolSuiteApacheCXFREST_EC6\/jax_rs04.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px\" title=\"jax_rs04\" border=\"0\" alt=\"jax_rs04\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/SpringSourceToolSuiteApacheCXFREST_EC6\/jax_rs04_thumb.jpg\" width=\"431\" height=\"411\" \/><\/a> <\/p>\n<\/p>\n<p>\u3068\u308c\u3066\u304d\u3066\u307e\u3059\uff01\uff01\uff01<\/p>\n<p>\u3064\u304b\u308c\u305f\u306e\u3067\u3001\u4eca\u65e5\u306f\u3053\u3053\u307e\u3067\u3002<\/p>\n<p>\u6b21\u306f\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 Spring MVC \u30a2\u30d7\u30ea\u3092\u3064\u304f\u3063\u3066\u3001\uff4aQuery \u304b\u3089REST\u30b5\u30fc\u30d3\u30b9\u3092\u305f\u305f\u3044\u3066\u3001CRUD \u3092\u5b9f\u73fe\u3059\u308b\u3068\u3053\u307e\u3067\u3084\u308d\u3002<\/p>\n<p>Android \u306f\u3057\u3070\u3089\u304f\u4f11\u307f\u3060\u306a\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>NetBeans\u306e\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u3067\u3042\u308c\u3070\u3001\u3082\u306e\u306e\u6570\u5206\u3067\u3001RESTful \u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u3067\u304d\u3042\u304c\u308b\u3068\u3053\u308d\u306a\u306e\u3060\u304c\u3001\u306f\u307e\u308b\u30dd\u30a4\u30f3\u30c8\u304c\u76db\u308a\u3060\u304f\u3055\u3093\u3002\u3002\u3002\u4f55\u3068\u304b\u52d5\u304b\u305b\u308b\u3088\u3046\u306b\u306a\u308b\u307e\u3067\u3001\u8db3\u304b\u30512\u65e5\u3082\u304b\u304b\u3063\u3066\u3057\u307e\u3063\u305f\u3002  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","_veu_custom_css":"","veu_display_promotion_alert":"","vkexunit_cta_each_option":"","footnotes":""},"categories":[46,47,48],"tags":[],"class_list":["post-300","post","type-post","status-publish","format-standard","hentry","category-java-ee","category-spring","category-springsource-tool-suite"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=300"}],"version-history":[{"count":0,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/300\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}