links are working

This commit is contained in:
Alex Huang 2012-11-26 15:59:58 -08:00
parent 862dff7d37
commit 35914d6f6a
13 changed files with 482 additions and 84 deletions

View File

@ -1,21 +1,13 @@
<!-- <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
Licensed to the Apache Software Foundation (ASF) under one license agreements. See the NOTICE file distributed with this work for additional
or more contributor license agreements. See the NOTICE file information regarding copyright ownership. The ASF licenses this file to
distributed with this work for additional information you under the Apache License, Version 2.0 (the "License"); you may not use
regarding copyright ownership. The ASF licenses this file this file except in compliance with the License. You may obtain a copy of
to you under the Apache License, Version 2.0 (the the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
"License"); you may not use this file except in compliance by applicable law or agreed to in writing, software distributed under the
with the License. You may obtain a copy of the License at License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied. See the License for the specific
http://www.apache.org/licenses/LICENSE-2.0 language governing permissions and limitations under the License. -->
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -44,6 +36,11 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.9</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
<defaultGoal>install</defaultGoal> <defaultGoal>install</defaultGoal>

View File

@ -18,7 +18,9 @@
*/ */
package org.apache.cloudstack.engine.datacenter.entity.api; package org.apache.cloudstack.engine.datacenter.entity.api;
import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import org.apache.cloudstack.engine.entity.api.CloudStackEntity; import org.apache.cloudstack.engine.entity.api.CloudStackEntity;
@ -29,6 +31,7 @@ import com.cloud.utils.fsm.StateObject;
* This interface specifies the states and operations all physical * This interface specifies the states and operations all physical
* and virtual resources in the data center must implement. * and virtual resources in the data center must implement.
*/ */
@Produces({"application/json", "application/xml"})
public interface DataCenterResourceEntity extends CloudStackEntity, StateObject<DataCenterResourceEntity.State> { public interface DataCenterResourceEntity extends CloudStackEntity, StateObject<DataCenterResourceEntity.State> {
/** /**
@ -87,4 +90,8 @@ public interface DataCenterResourceEntity extends CloudStackEntity, StateObject<
@POST @POST
boolean reactivate(); boolean reactivate();
@Override
@GET
State getState();
} }

View File

@ -22,14 +22,18 @@ import java.util.List;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.xml.bind.annotation.XmlRootElement;
import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter;
/** /**
* Describes a zone and operations that can be done in a zone. * Describes a zone and operations that can be done in a zone.
*/ */
@Path("zone/{zone-id}") @XmlRootElement(name="zone")
public interface ZoneEntity extends DataCenterResourceEntity, DataCenter { public interface ZoneEntity extends DataCenterResourceEntity, DataCenter {
@GET @GET
@Path("/pods")
List<PodEntity> listPods(); List<PodEntity> listPods();
List<String> listPodIds();
} }

View File

@ -0,0 +1,35 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.engine.rest.datacenter.entity.api;
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
public class PodRestTO {
public String uuid;
public String name;
public PodRestTO(PodEntity pod) {
this.uuid = pod.getUuid();
this.name = pod.getName();
}
public PodRestTO() {
}
}

View File

@ -0,0 +1,63 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.engine.rest.datacenter.entity.api;
import java.net.URI;
import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.UriBuilder;
import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
import org.apache.cloudstack.engine.service.api.ProvisioningService;
import org.springframework.stereotype.Service;
@Service("zoneService")
@Path("/zone/{zoneid}")
public class ZoneRestTO {
@Inject
protected static ProvisioningService s_provisioningService;
public String id;
public URI uri;
public String name;
public String[] pods;
public ZoneRestTO(UriBuilder ub, ZoneEntity zone, URI uri) {
this.id = zone.getUuid();
this.name = zone.getName();
this.uri = uri;
List<String> podIds = zone.listPodIds();
this.pods = new String[podIds.size()];
this.pods = podIds.toArray(new String[podIds.size()]);
}
public ZoneRestTO() {
}
@GET
@Path("/pods")
public String[] listPods(@PathParam("zoneid") String zoneId) {
return this.pods;
}
}

View File

@ -0,0 +1,23 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.engine.rest.datacenter.entity.api;
public class ZoneRestTOs {
}

View File

@ -0,0 +1,84 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.engine.rest.service.api;
import java.util.Iterator;
import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
import org.apache.cloudstack.engine.rest.datacenter.entity.api.PodRestTO;
import org.apache.cloudstack.engine.rest.datacenter.entity.api.ZoneRestTO;
import org.apache.cloudstack.engine.service.api.ProvisioningService;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@Service("provisioningService")
@Path("/provisioning")
@Produces({"application/xml", "application/json"})
@Component
public class ProvisioningRestService {
@Inject
ProvisioningService _provisioningService;
@GET
@Path("/{zoneid}")
public ZoneRestTO getZone(@Context UriInfo ui, @PathParam("zoneid") String id) {
UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getZone");
ZoneEntity entity = _provisioningService.getZone(id);
return new ZoneRestTO(ub, entity, ub.build(entity.getUuid()));
}
@GET
@Path("/zones")
public ZoneRestTO[] listZones(@Context UriInfo ui) {
List<ZoneEntity> zones = _provisioningService.listZones();
ZoneRestTO[] tos = new ZoneRestTO[zones.size()];
UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getZone");
Iterator<ZoneEntity> it = zones.iterator();
for (int i = 0; i < tos.length; i++) {
ZoneEntity entity = it.next();
tos[i] = new ZoneRestTO(ub, entity, ub.build(entity.getUuid()));
}
return tos;
}
@GET
@Path("/zone/{zoneid}/pods")
public PodRestTO[] listPods(@PathParam("zoneid") String zoneId) {
List<PodEntity> pods = _provisioningService.listPods();
PodRestTO[] tos = new PodRestTO[pods.size()];
Iterator<PodEntity> it = pods.iterator();
for (int i = 0; i < tos.length; i++) {
PodEntity pod = it.next();
tos[i] = new PodRestTO(pod);
}
return tos;
}
}

View File

@ -21,18 +21,11 @@ package org.apache.cloudstack.engine.service.api;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity; import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity; import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity; import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity; import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
import com.cloud.dc.Pod;
import com.cloud.host.Host; import com.cloud.host.Host;
import com.cloud.host.Status; import com.cloud.host.Status;
import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePool;
@ -42,56 +35,37 @@ import com.cloud.storage.StoragePool;
* ProvisioningService registers and deregisters physical and virtual * ProvisioningService registers and deregisters physical and virtual
* resources that the management server can use. * resources that the management server can use.
*/ */
@Path("/provision")
@Produces({"application/json", "application/xml"})
public interface ProvisioningService { public interface ProvisioningService {
@POST
StorageEntity registerStorage(String name, List<String> tags, Map<String, String> details); StorageEntity registerStorage(String name, List<String> tags, Map<String, String> details);
@POST
ZoneEntity registerZone(String name, List<String> tags, Map<String, String> details); ZoneEntity registerZone(String name, List<String> tags, Map<String, String> details);
@POST
PodEntity registerPod(String name, List<String> tags, Map<String, String> details); PodEntity registerPod(String name, List<String> tags, Map<String, String> details);
@POST
ClusterEntity registerCluster(String name, List<String> tags, Map<String, String> details); ClusterEntity registerCluster(String name, List<String> tags, Map<String, String> details);
@POST
String registerHost(String name, List<String> tags, Map<String, String> details); String registerHost(String name, List<String> tags, Map<String, String> details);
@DELETE
void deregisterStorage(String uuid); void deregisterStorage(String uuid);
@DELETE
void deregisterZone(); void deregisterZone();
@DELETE
void deregisterPod(); void deregisterPod();
@DELETE
void deregisterCluster(); void deregisterCluster();
@DELETE
void deregisterHost(); void deregisterHost();
void changeState(String type, String entity, Status state); void changeState(String type, String entity, Status state);
@GET
@Path("/hosts")
List<Host> listHosts(); List<Host> listHosts();
@GET List<PodEntity> listPods();
@Path("/pods")
List<Pod> listPods();
@GET
@Path("/zones")
List<ZoneEntity> listZones(); List<ZoneEntity> listZones();
@GET
@Path("/storages")
List<StoragePool> listStorage(); List<StoragePool> listStorage();
ZoneEntity getZone(String id);
} }

View File

@ -0,0 +1,197 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.engine.datacenter.entity.api;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.cloud.org.Cluster;
public class PodEntityImpl implements PodEntity {
String _uuid;
String _name;
public PodEntityImpl(String uuid, String name) {
_uuid = uuid;
_name = name;
}
@Override
public boolean enable() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean disable() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean deactivate() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean reactivate() {
// TODO Auto-generated method stub
return false;
}
@Override
public State getState() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getUuid() {
return _uuid;
}
@Override
public long getId() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getCurrentState() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getDesiredState() {
// TODO Auto-generated method stub
return null;
}
@Override
public Date getCreatedTime() {
// TODO Auto-generated method stub
return null;
}
@Override
public Date getLastUpdatedTime() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getOwner() {
// TODO Auto-generated method stub
return null;
}
@Override
public Map<String, String> getDetails(String source) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<String> getDetailSources() {
// TODO Auto-generated method stub
return null;
}
@Override
public void addDetail(String source, String name, String value) {
// TODO Auto-generated method stub
}
@Override
public void delDetail(String source, String name, String value) {
// TODO Auto-generated method stub
}
@Override
public void updateDetail(String source, String name, String value) {
// TODO Auto-generated method stub
}
@Override
public List<Method> getApplicableActions() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getCidrAddress() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCidrSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getGateway() {
// TODO Auto-generated method stub
return null;
}
@Override
public long getDataCenterId() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getName() {
return _name;
}
@Override
public AllocationState getAllocationState() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean getExternalDhcp() {
// TODO Auto-generated method stub
return false;
}
@Override
public List<Cluster> listClusters() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -19,50 +19,52 @@
package org.apache.cloudstack.engine.datacenter.entity.api; package org.apache.cloudstack.engine.datacenter.entity.api;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@Path("/zone/{id}")
public class ZoneEntityImpl implements ZoneEntity { public class ZoneEntityImpl implements ZoneEntity {
String _id;
String _name;
// This is a test constructor
public ZoneEntityImpl(String id, String name) {
_id = id;
_name = name;
}
public ZoneEntityImpl() {
}
@Override @Override
@POST
public boolean enable() { public boolean enable() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
} }
@Override @Override
@POST
public boolean disable() { public boolean disable() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
} }
@Override @Override
@POST
public boolean deactivate() { public boolean deactivate() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
} }
@Override @Override
@POST
public boolean reactivate() { public boolean reactivate() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
} }
@Override @Override
@GET
public String getUuid() { public String getUuid() {
// TODO Auto-generated method stub return _id;
return null;
} }
@Override @Override
@ -72,35 +74,30 @@ public class ZoneEntityImpl implements ZoneEntity {
} }
@Override @Override
@GET
public String getCurrentState() { public String getCurrentState() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return "state"; return "state";
} }
@Override @Override
@GET
public String getDesiredState() { public String getDesiredState() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return "desired_state"; return "desired_state";
} }
@Override @Override
@GET
public Date getCreatedTime() { public Date getCreatedTime() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return new Date(); return new Date();
} }
@Override @Override
@GET
public Date getLastUpdatedTime() { public Date getLastUpdatedTime() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return new Date(); return new Date();
} }
@Override @Override
@GET
public String getOwner() { public String getOwner() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return "owner"; return "owner";
@ -168,8 +165,7 @@ public class ZoneEntityImpl implements ZoneEntity {
@Override @Override
public String getName() { public String getName() {
// TODO Auto-generated method stub return _name;
return null;
} }
@Override @Override
@ -291,4 +287,12 @@ public class ZoneEntityImpl implements ZoneEntity {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@Override
public List<String> listPodIds() {
List<String> podIds = new ArrayList<String>();
podIds.add("pod-uuid-1");
podIds.add("pod-uuid-2");
return podIds;
}
} }

View File

@ -22,23 +22,19 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity; import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity; import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntityImpl;
import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity; import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity; import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
import org.springframework.stereotype.Service; import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntityImpl;
import org.springframework.stereotype.Component;
import com.cloud.dc.Pod;
import com.cloud.host.Host; import com.cloud.host.Host;
import com.cloud.host.Status; import com.cloud.host.Status;
import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePool;
@Service("provisioningService") @Component
@Path("/provisioning")
public class ProvisioningServiceImpl implements ProvisioningService { public class ProvisioningServiceImpl implements ProvisioningService {
@Override @Override
@ -114,18 +110,18 @@ public class ProvisioningServiceImpl implements ProvisioningService {
} }
@Override @Override
public List<Pod> listPods() { public List<PodEntity> listPods() {
// TODO Auto-generated method stub List<PodEntity> pods = new ArrayList<PodEntity>();
pods.add(new PodEntityImpl("pod-uuid-1", "pod1"));
pods.add(new PodEntityImpl("pod-uuid-2", "pod2"));
return null; return null;
} }
@Override @Override
@GET
@Path("/zones")
@Produces("text/plain")
public List<ZoneEntity> listZones() { public List<ZoneEntity> listZones() {
List<ZoneEntity> zones = new ArrayList<ZoneEntity>(); List<ZoneEntity> zones = new ArrayList<ZoneEntity>();
// TODO Auto-generated method stub zones.add(new ZoneEntityImpl("zone-uuid-1", "name1"));
zones.add(new ZoneEntityImpl("zone-uuid-2", "name2"));
return zones; return zones;
} }
@ -135,4 +131,10 @@ public class ProvisioningServiceImpl implements ProvisioningService {
return null; return null;
} }
@Override
public ZoneEntity getZone(String uuid) {
ZoneEntityImpl impl = new ZoneEntityImpl(uuid, "name");
return impl;
}
} }

View File

@ -10,11 +10,15 @@
<import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<context:component-scan base-package="org.apache.cloudstack.test"/> <context:component-scan base-package="org.apache.cloudstack" />
<jaxrs:server id="restContainer" address="/"> <jaxrs:server id="restContainer" address="/">
<jaxrs:serviceBeans> <jaxrs:serviceBeans>
<ref bean="timeService" /> <ref bean="provisioningService" />
<ref bean="zoneService" />
</jaxrs:serviceBeans> </jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
</jaxrs:providers>
</jaxrs:server> </jaxrs:server>
</beans> </beans>

View File

@ -2,7 +2,11 @@
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app> <web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="true"
version="3.0">
<context-param> <context-param>
<param-name>contextConfigLocation</param-name> <param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value> <param-value>WEB-INF/beans.xml</param-value>