我正在使用Netbeans,我正在遵循Getting Started with JAX-WS Web Services中的说明。我目前正在开发一种方法,我将作为WebMethod公开,给定两个输入字符串,返回模型(在Jena中定义的接口)。这样,我想打印我的模型。
/**
*
* @author admin
*/
@WebService(serviceName = "Prova_WS")
@Stateless()
public class Prova_WS {
/**
* Web service operation
*/
@WebMethod(operationName = "operation")
public Model operation(@WebParam(name = "f") String f, @WebParam(name = "f1") String f1) {
//to be
return model;
}
}
鉴于提供模型类型的返回值可能没什么意义,我在启动测试WS服务时会出错。事实上,我用意大利语得到了这个错误:
Errore durante la generazione degli artifact per il seguente WSDL http:// localhost:8080 / Prova_WS / Prova_WS?WSDL
La possibilecausapuòessereil richiamo di https quando lapplicazionenonèconfigurataper la sicurezza
我注意到,例如,如果我使用返回类型 int 更改方法,我注意到我没有得到相同的错误。 为什么?我错了什么?
答案 0 :(得分:1)
请注意,Jena Model
未显示在默认Types Supported by JAX-WS列表中,您可能需要Use a custom class as return type。 Model
不符合Java Bean规范,并且它没有任何JaxB注释,因此您需要了解您的Web服务库是否允许您自己创建自定义序列化。
如果可以使用String返回类型,则可以使用Jena的内部方法序列化模型,然后返回结果字符串:
final ByteArrayOutputStream out = new ByteArrayOutputStream();
model.write(out, "RDF/XML");
return new String(out.toByteArray());
在客户端,如果要使用Jena API客户端,则需要小心将该String转换回Jena Model
。
final ByteArrayInputStream in = new ByteArrayInputStream(result.getBytes());
model.read(in, null, "RDF/XML");