我启动" @Web方法"时出错使用Model作为返回类型

时间:2014-07-25 14:26:22

标签: java web-services jax-ws jena semantic-web

我正在使用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 更改方法,我注意到我没有得到相同的错误。 为什么?我错了什么?

1 个答案:

答案 0 :(得分:1)

请注意,Jena Model未显示在默认Types Supported by JAX-WS列表中,您可能需要Use a custom class as return typeModel不符合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");