我有一些非常基本的代码来调用webservice。使用RestTemplate()。getForObject为我提供“不是有效的HTTP URL”错误。
Exception in thread "main" java.lang.IllegalArgumentException: [localhost:9080/someApp/testWs/partners/1] is not a valid HTTP URL
at org.springframework.web.util.UriUtils.encodeHttpUrl(UriUtils.java:245)
at org.springframework.web.client.RestTemplate$HttpUrlTemplate.encodeUri(RestTemplate.java:651)
at org.springframework.web.util.UriTemplate.expand(UriTemplate.java:140)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:400)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:199)
at org.kofc.test.TestTemplate.main(TestTemplate.java:26)
以下是客户端代码:
package org.smpkg.test;
import org.smpkg.dvo.Prtnr;
import org.springframework.web.client.RestTemplate;
public class TestTemplate
{
private static final long serialVersionUID = 1130201273334264152L;
public static void main(String[] args){
System.out.println("I am here ....");
Prtnr partner = new RestTemplate().getForObject("localhost:9080/someApp/testWs/partners/{id}", Prtnr.class, "1");
System.out.println("partner name is : " + partner.getPrtnrNm());
}
}
控制器
@RequestMapping(value="/{id}", method=RequestMethod.GET)
@ResponseBody
public Prtnr getPartner(@PathVariable("id") String id){
....
....
return partner;
}
servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="org.somepkg.bso" />
<!--
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
-->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</util:list>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="atom" value="application/atom+xml"/>
<entry key="html" value="text/html"/>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
<bean id="content" class="com.springsource.samples.rest.SampleContentAtomView"/>
</beans>
访问链接localhost:9080 / someApp / testWs / partners / 1&gt;返回结果,但使用RestTemplate()。getForObject()不起作用。
这是Prtnr课程:
public class Prtnr implements Cloneable, java.io.Serializable {
private static final long serialVersionUID = 201207021420600052L;
private Integer prtnrId;
private String creatUserId;
private Date creatTs;
private String updtUserId;
private Date updtTs;
private String prtnrNm;
private Integer cncilNum;
private Character prtnrTypCd;
private Set<PrtnrGeoInfo> prtnrGeoInfos = new HashSet<PrtnrGeoInfo>(0);
private Set<PrtnrDtl> prtnrDtls = new HashSet<PrtnrDtl>(0);
private Set<SuplyDtl> suplyDtls = new HashSet<SuplyDtl>(0);
private Set<TrnsprtDtl> trnsprtDtls = new HashSet<TrnsprtDtl>(0);
private Set<PrtnrFacil> prtnrFacils = new HashSet<PrtnrFacil>(0);
private Set<PrtnrHumanResrc> prtnrHumanResrcs = new HashSet<PrtnrHumanResrc>(0);
.....
.....
Getters and setters for these properties
...
}
我在服务器端看到的错误是: [12/3/12 10:25:57:764 EST] 00000039 ServletWrappe E SRVE0068E:在servlet的一个服务方法中抛出未捕获的异常:
spitter.
Exception thrown : org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain:
org.kofc.dvo.Prtnr["prtnrGeoInfos"]->org.hibernate.collection.PersistentSet[0]->org.kofc.dvo.PrtnrGeoInfo["id"]->
org.kofc.dvo.PrtnrGeoInfoId["partner"]->
at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:164)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)
at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)
网络服务的卷曲是: 线程“main”java.lang.StackOverflowError中的异常 at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:579) at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299) at org.codehaus.jackson.map.deser.SettableBeanProperty $ MethodProperty.deserializeAndSet(SettableBeanProperty.java:414) at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697) 在org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
我缺少什么?
由于