当前位置: 首页 > 知识库问答 >
问题:

集成exploration和ant for REST APIs文档

孙斌
2023-03-14

我在为CXF REST服务API项目集成发音和ant时遇到错误。getFeeItemsByCapID()方法中存在错误。我试图在源代码中找到答案,但没有结果。谁对错误有任何想法?感谢您的帮助。如果您有任何提示。

蚂蚁脚本

<path id="enunciate.classpath">
    <fileset dir="${enunciate.home}/lib">
        <include name="*.jar"/>
        </fileset>
        <!--include (optional) spring module-->
        <fileset dir="${enunciate.home}/lib/modules/cxf">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${java.home}">
            <include name="lib/tools.jar"/>
        </fileset>
    </path>

    <taskdef name="enunciate" classname="org.codehaus.enunciate.main.EnunciateTask">
        <classpath refid="enunciate.classpath"/>
    </taskdef>  

    <enunciate basedir="java/" configFile="enunciate.xml">
        <include name="**/*.java"/>
        <classpath refid="enunciate.classpath"/>
        <export artifactId="war.file" destination="d:/myapp.war"/>
        <javacArgument argument="-g"/>
    </enunciate>

expertion . XML

<?xml version="1.0"?>
<enunciate label="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
<namespaces>
    <namespace id="api" uri="http://api.example.com/" />
    <namespace id="link" uri="http://api.example.com/link" />
    <namespace id="persona" uri="http://api.example.com/persona" />
</namespaces>
<modules>
    <!-- Docs -->
    <docs splashPackage="org.codehaus.enunciate.api" title="test" copyright="test.com"/>
    <java-client disabled="false"/>
    <amf disabled="true"/>
    <c disabled="true"/>
    <obj-c disabled="true"/>
    <csharp disabled="true"/>
    <spring-app disabled="false"/>
    <cxf disabled="false"/>
    <gwt disabled="true"/>
    <jaxws-ri disabled="true"/>
    <jersey disabled="true"/>
</modules>

Java代码

@GET
@RecordDetailSecurity(RecordDetailSectionType.FEE)
@Path("/{recordIds}/fees/")
@Produces(MediaType.APPLICATION_JSON)
@JsonView(Views.PublicView.class)
public ResponseModel getFeeItemsByCapID(@PathParam("recordIds") String recordIds,
        @QueryParam("fields") @DefaultValue("") String fields) throws Exception
{

例外:

java.lang.IllegalStateException: D:\AA7.2.0\main-dev\biz\modules\rest-apis\java\com\accela\restapis\jaxrs\agency\service\FeeWebService.java:76: the element 'value' must have a value specified.
    at net.sf.jelly.apt.decorations.declaration.DecoratedAnnotationMirror.<init>(DecoratedAnnotationMirror.java:66)
    at net.sf.jelly.apt.decorations.DeclarationDecorator.decorate(DeclarationDecorator.java:362)
    at net.sf.jelly.apt.decorations.DeclarationDecorator.decorateAnnotationMirrors(DeclarationDecorator.java:113)
    at net.sf.jelly.apt.decorations.declaration.DecoratedDeclaration.getAnnotationMirrors(DecoratedDeclaration.java:213)
    at net.sf.jelly.apt.decorations.declaration.DecoratedDeclaration.getAnnotations(DecoratedDeclaration.java:195)
    at net.sf.jelly.apt.decorations.declaration.DecoratedDeclaration.getAnnotation(DecoratedDeclaration.java:225)
    at org.codehaus.enunciate.contract.jaxrs.ResourceMethod.<init>(ResourceMethod.java:130)
    at org.codehaus.enunciate.contract.jaxrs.Resource.getResourceMethods(Resource.java:143)
    at org.codehaus.enunciate.contract.jaxrs.Resource.<init>(Resource.java:69)
    at org.codehaus.enunciate.contract.jaxrs.RootResource.<init>(RootResource.java:34)
    at org.codehaus.enunciate.apt.EnunciateAnnotationProcessor.getRootModel(EnunciateAnnotationProcessor.java:214)
    at org.codehaus.enunciate.apt.EnunciateAnnotationProcessor.process(EnunciateAnnotationProcessor.java:103)
    at com.sun.mirror.apt.AnnotationProcessors$CompositeAnnotationProcessor.process(AnnotationProcessors.java:60)
    at com.sun.tools.apt.comp.Apt.main(Apt.java:454)
    at com.sun.tools.apt.main.JavaCompiler.compile(JavaCompiler.java:258)
    at com.sun.tools.apt.main.Main.compile(Main.java:1102)
    at com.sun.tools.apt.main.Main.compile(Main.java:964)
    at com.sun.tools.apt.Main.processing(Main.java:95)
    at com.sun.tools.apt.Main.process(Main.java:85)
    at com.sun.tools.apt.Main.process(Main.java:67)
    at org.codehaus.enunciate.main.Enunciate.invokeApt(Enunciate.java:777)
    at org.codehaus.enunciate.main.Enunciate.doGenerate(Enunciate.java:366)
    at org.codehaus.enunciate.main.Enunciate$Stepper.step(Enunciate.java:1735)
    at org.codehaus.enunciate.main.Enunciate$Stepper.stepTo(Enunciate.java:1767)
    at org.codehaus.enunciate.main.Enunciate.execute(Enunciate.java:174)
    at org.codehaus.enunciate.main.EnunciateTask.execute(EnunciateTask.java:156)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:357)
    at org.apache.tools.ant.Target.performTasks(Target.java:385)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
    at org.apache.tools.ant.Main.runBuild(Main.java:758)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

源代码:

public DecoratedAnnotationMirror(AnnotationMirror delegate) {
if (delegate == null) {
  throw new IllegalArgumentException("A delegate must be provided.");
}

this.delegate = delegate;
AnnotationType annotationType = delegate.getAnnotationType();
Collection<AnnotationTypeElementDeclaration> allElements = annotationType.getDeclaration() != null? annotationType.getDeclaration().getMethods() : Collections.<AnnotationTypeElementDeclaration>emptyList();
Map<AnnotationTypeElementDeclaration, AnnotationValue> elementValues = getElementValues();

put("annotationType", annotationType);
put("position", delegate.getPosition());
put("elementValues", elementValues);
allElementValues = new HashMap<String, Object>();
for (AnnotationTypeElementDeclaration element : allElements) {
  if (elementValues.containsKey(element)) {
    Object value = elementValues.get(element).getValue();
    allElementValues.put(element.getSimpleName(), value);
    put(element.getSimpleName(), value);
  }
  else {
    AnnotationValue defaultValue = element.getDefaultValue();
    if (defaultValue == null) {
      throw new IllegalStateException(delegate.getPosition() + ": the element '" + element.getSimpleName() + "' must have a value specified.");
    }

共有2个答案

汝彭薄
2023-03-14

关于注释默认值错误,我创建了一个示例项目以重试。它工作得很好。现在,我需要改变我原来的看法。这是我的错首先,我的项目编译是成功的,之前没有明确蚂蚁目标。然而,枚举“RecordDetailSectionType”实际上属于另一个jar。我没有在enuncicate类路径中包含jar,所以enuncinate无法识别定制的注释类型值。对不起,误会了。

周飞
2023-03-14

我在自定义注释中找到了根本原因。似乎因为注释没有默认值。当我删除方法的自定义注释或在注释定义中附加默认值时。异常将消失。但是注释接受枚举,在业务逻辑中没有默认值的注释。我们始终需要设置枚举值以供使用。但是,为什么注释总是需要默认值?有人知道原因吗?

@Target( {ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RecordDetailSecurity
{
    RecordDetailSectionType value(); //append default value such as "default RecordDetailSectionType.ADDITIONAL_INFORMATION;"
}

@RecordDetailSecurity(RecordDetailSectionType.FEE)
public ResponseModel getFeeItemsByCapID(@PathParam("recordIds") String recordIds,
    @QueryParam("fields") @DefaultValue("") String fields) throws Exception
 类似资料:
  • 相关限制及注意事项 1、iOS SDK新版支持 iOS8 以上版本,同时支持 iPhone、iPad,支持竖屏和横屏。 2、目前发布xcode版本为XCode 11.3.1,建议使用新版开发 3、iOS目前仅仅支持超链接标签,其他html标签和属性均不识别 4、iOS需要申请麦克风、相机、相册、推送权限,否则部分功能无法使用 智齿客服SDK为企业提供了一整套完善的智能客服解决方案。智齿客服 SDK

  • 相关限制及注意事项 1、iOS SDK新版支持 iOS8 以上版本。 2、目前发布xcode版本为XCode 12.0,建议使用新版开发 3、iOS目前仅仅支持超链接标签,其他html标签和属性均不识别 4、iOS需要申请麦克风、相机、相册权限,否则部分功能无法使用 智齿客服SDK具有以下特性 在线咨询:咨询人工客服(收发图片、发送视频)、发送表情; 高度自定义UI; 1 文档介绍 1.1 集成流

  • 我有一种情况,我需要使用Mulesoft读取附加在记录中的文件(XLS)。我必须应用一些验证,比如文件不应该有超过10列,若并没有,它会通过错误消息返回给用户。 我的问题是如何使用Mulesoft读取excel文件。由于我们有这么多附加文件的记录,我需要创建一个设置,以便Mulesoft可以动态读取每个记录的文件。 请帮忙。 你好,Pankaj

  • 问题内容: 现在,开发iOS应用程序的新语言已变得 迅捷 。 我们如何与 AFNetworking 集成或使用 NSURLSession 将是一个更好的选择? 请帮帮我.. 问题答案: 您必须将AFNetworking添加到您的swift项目 在构建设置->定义模块中设置为是 在构建设置-> Swift编译器-> Objective-C桥接文件中,例如,设置桥接文件’ProjectName-Bri

  • 问题内容: 我想捕获我在jsp中构建的responseXML。我该怎么办。之后,我将其转换为html。我知道这很烦人,我们可以使用框架或类似jquery的库来实现,但我可以用ajax来实现。由于我必须使用JSON SERVICE,因此我在使用jquery和jsp \ servlet时也遇到了问题。为什么在我看来是如此复杂。 问题答案: 不需要那么复杂。您可能只需要一个人调整所有技术即可。JSP,S

  • 主要内容:步骤1 - 打开Eclipse Marketplace,步骤2 - 安装Buildship插件,步骤3 - 验证Gradle插件安装情况,步骤4 - 验证目录结构本章将介绍了集成。以下是将插件添加到的步骤。 步骤1 - 打开Eclipse Marketplace 打开在系统中安装好的。 转到 → ,如下面的屏幕截图所示。 步骤2 - 安装Buildship插件 单击 Eclipse 中的 ,在打开界面中找到以下屏幕截图。在左侧搜索栏上输入。是一个Gradle集成插件。当在屏幕上找到时,