小编Dan*_*ler的帖子

如何确定String是否包含无效的编码字符

使用场景

我们已经实现了一个Web服务,我们的Web前端开发人员在内部使用(通过php api)来显示产品数据.在网站上,用户输入内容(即查询字符串).在内部,网站通过api调用服务.

注意:我们使用restlet,而不是tomcat

原始问题

Firefox 3.0.10似乎尊重浏览器中选定的编码,并根据所选编码对URL进行编码.这确实导致ISO-8859-1和UTF-8的不同查询字符串.

我们的网站转发来自用户的输入并且不转换它(它应该),因此它可以通过使用包含德语变音符号的查询字符串调用web服务的api来调用服务.

即查询部分看起来像

    ...v=abcädef
Run Code Online (Sandbox Code Playgroud)

如果选择"ISO-8859-1",则发送的查询部分看起来像

...v=abc%E4def
Run Code Online (Sandbox Code Playgroud)

但是如果选择"UTF-8",则发送的查询部分看起来像

...v=abc%C3%A4def
Run Code Online (Sandbox Code Playgroud)

期望的解决方案

当我们控制服务时,因为我们已经实现了它,我们想在服务器端检查调用是否包含非utf-8字符,如果是,则以4xx http状态响应

当前的解决方案

检查每个字符(== string.substring(i,i + 1))

  1. 如果character.getBytes()[0]等于63为'?'
  2. 如果Character.getType(character.charAt(0))返回OTHER_SYMBOL

protected List< String > getNonUnicodeCharacters( String s ) {
  final List< String > result = new ArrayList< String >();
  for ( int i = 0 , n = s.length() ; i < n ; i++ ) {
    final String character = s.substring( i , i + 1 );
    final boolean isOtherSymbol = 
      ( …
Run Code Online (Sandbox Code Playgroud)

java string unicode encoding

32
推荐指数
4
解决办法
9万
查看次数

防御性编程的编辑模板

最近我在FindBugs上发布了关于暴露内部状态的警告,即当返回对数组的引用而不是返回数组的副本时.我创建了一些模板,以便更容易地转换代码.

您创建了哪一个支持防御性编程并希望与SO人群分享?

我到目前为止创建的模板(作为示例):

要创建要从方法返回的数组的副本,请执行以下操作:

final ${type}[] ${result} = new ${type}[ ${array}.length ];
System.arraycopy( ${array} , 0 , ${result} , 0 , ${array}.length );
Run Code Online (Sandbox Code Playgroud)

要克隆对象:

(${o}!= null?(${type})${o}.clone():null)
Run Code Online (Sandbox Code Playgroud)

java eclipse templates defensive-programming

8
推荐指数
1
解决办法
780
查看次数

枚举对象应该是无状态的吗?

按照设计,java中的枚举常量是单例,为了并发使用,我通常会创建无状态枚举实例并使用方法参数根据需要注入数据.

例:

目前我正在创建一个具有Operations的REST服务(使用策略模式的变体实现为枚举).

public enum Operation {

  DO_THIS() {
    public Result doSomething(Object theData) {
    }
  } ,
  // Other Operations go here
  ;

  public abstract Result doSomething(Object theData);

}
Run Code Online (Sandbox Code Playgroud)

现在我想收集有关操作被调用的频率以及成功频率等的数据.

我可以在使用枚举实例时从外部保存状态,但似乎状态应该保存在Operation中,因为操作应该包含它自己的状态.

现在我的一般问题是:

有状态的枚举实例(除了并发问题)是一个糟糕的设计吗?

java oop enums

7
推荐指数
3
解决办法
3120
查看次数

使用JRE 1.5和JDK 1.6时DocumentBuilder.parse的差异

最近我们最终将项目转换为Java 1.6.在执行测试时,我发现使用1.6时,不会抛出使用1.5抛出的SAXParseException.

下面是我的测试代码来演示这个问题.

import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.SchemaFactory;

import org.junit.Test;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;


/**
 * Test class to demonstrate the difference between JDK 1.5 to JDK 1.6.
 * 
 * Seen on Linux:
 * 
 * <pre>
 * #java version "1.6.0_18"
 * Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
 * Java HotSpot(TM) Server VM (build 16.0-b13, mixed mode)
 * </pre>
 * 
 * Seen on OSX:
 * 
 * <pre>
 * java version "1.6.0_17"
 * Java(TM) SE Runtime Environment …
Run Code Online (Sandbox Code Playgroud)

java xml parsing sax jdk1.6

6
推荐指数
1
解决办法
4007
查看次数

如何在Windows 10下安装svcutil.exe

我拼命地寻找一种安装方法,svcutil.exe因为我在这里和其他地方读到,这是将WSDL编译为C#代码的方法。我通过Windows SDK安装进行了尝试,该安装产生了大约1K个安装程序的文件夹,我不知道该从哪个目录开始。任何指导表示赞赏。

注意:我目前正在使用Visual Studio 2017预览版,这与某种方式相关吗?

c# soap wsdl code-generation

6
推荐指数
2
解决办法
1万
查看次数

如何在jaxb编组期间跳过空字段

marshaller是否有办法生成一个跳过任何null属性的新xml文件?因此someAttribute =""之类的内容不会出现在文件中.

谢谢

null attributes jaxb marshalling

1
推荐指数
1
解决办法
9610
查看次数