我已经读过,我可以创建一个javax.ws.rs.ext.ExceptionMapper将抛出的应用程序异常映射到Response对象的实现.
我创建了一个简单的示例,如果持久化对象时手机长度超过20个字符,则抛出异常.我期望将异常映射到HTTP 400(错误请求)响应; 但是,我收到HTTP 500(内部服务器错误),但有以下异常:
java.lang.ClassCastException: com.example.exception.InvalidDataException cannot be cast to java.lang.Error
Run Code Online (Sandbox Code Playgroud)
我错过了什么?任何意见是极大的赞赏.
异常映射器:
@Provider
public class InvalidDataMapper implements ExceptionMapper<InvalidDataException> {
@Override
public Response toResponse(InvalidDataException arg0) {
return Response.status(Response.Status.BAD_REQUEST).build();
}
}
Run Code Online (Sandbox Code Playgroud)
例外类:
public class InvalidDataException extends Exception {
private static final long serialVersionUID = 1L;
public InvalidDataException(String message) {
super(message);
}
...
}
Run Code Online (Sandbox Code Playgroud)
实体类:
@Entity
@Table(name="PERSON")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Person {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID")
private Long id;
@Column(name="NAME")
private String name;
@Column(name="PHONE")
private …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个独立的客户端来使用一些Web服务.我必须将我的用户名和密码添加到SOAP Header中.我尝试添加凭据如下:
OTSWebSvcsService service = new OTSWebSvcsService();
OTSWebSvcs port = service.getOTSWebSvcs();
BindingProvider prov = (BindingProvider)port;
prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "myusername");
prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "mypassword");
...
Run Code Online (Sandbox Code Playgroud)
当我在服务上调用方法时,我得到以下异常:
com.ibm.wsspi.wssecurity.SoapSecurityException: WSEC5048E: One of "SOAP Header" elements required.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我如何将这些属性添加到SOAP标头?
编辑:我使用的是JDK6中包含的JAX-WS 2.1.我现在正在使用JAX-WS 2.2.我现在得到以下异常:
com.ibm.wsspi.wssecurity.SoapSecurityException: WSEC5509E: A security token whose type is [http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken] is required.
Run Code Online (Sandbox Code Playgroud)
我该如何创建此令牌?
我有一个包含循环的对象图.我如何让JAXB来处理这个问题?我尝试@XmlTransient在子类中使用注释,但JAXB编组仍然检测到循环.
@Entity
@XmlRootElement
public class Contact {
@Id
private Long contactId;
@OneToMany(mappedBy = "contact")
private List<ContactAddress> addresses;
...
}
@Entity
@XmlRootElement
public class ContactAddress {
@Id
private Long contactAddressId;
@ManyToOne
@JoinColumn(name = "contact_id")
private Contact contact;
private String address;
...
}
Run Code Online (Sandbox Code Playgroud) 我在父实体上执行级联持久操作时遇到问题.当子实体被持久化时,父实体的引用(生成的id)为null.我怎样才能让它坚持正确?
实体:
@Entity
public class Contact {
@Id @GeneratedValue(strategy=GenerationType.TABLE, generator="contact_gen")
@TableGenerator(name="contact_gen",
table="id_gen", pkColumnName="gen_name",
valueColumnName="gen_val", pkColumnValue="cont_gen")
@Column(name="contact_id")
private Long id;
@Column(name="name")
private String name;
@OneToMany(mappedBy="contact", cascade=CascadeType.PERSIST)
private List<Address> addresses = new ArrayList<Address>();
public void addAddress(Address address) {
addresses.add(address);
}
...
}
@Entity
public class Address {
@Id @GeneratedValue(strategy=GenerationType.TABLE, generator="address_gen")
@TableGenerator(name="address_gen",
table="id_gen", pkColumnName="gen_name",
valueColumnName="gen_val", pkColumnValue="addr_gen")
@Column(name="address_id")
private Long id;
@Column(name="full_address")
private String fullAddress;
@ManyToOne
@JoinColumn(name="contact_id")
private Contact contact;
...
}
Run Code Online (Sandbox Code Playgroud)
服务:
@Stateless
public class ContactService {
@PersistenceContext
private EntityManager em;
public void …Run Code Online (Sandbox Code Playgroud) 我需要针对存储URL编码文本的遗留表运行查询.我需要在我的结果中解码此文本.我该如何实现这一目标?
我有一些使用工厂的示例代码.我想通过删除工厂来清理代码并使用Guice代替.我试图这样做,但我遇到了一个小障碍.我对Guice很新,所以我希望有人可以帮助我.
现有客户端代码(使用工厂):
public class MailClient {
public static void main(String[] args) {
MailConfig config = MailConfigFactory.get();
config.setHost("smtp.gmail.com");
Mail mail = MailFactory.get(config);
mail.send();
}
}
Run Code Online (Sandbox Code Playgroud)
我试图使用Guice进行重构:
//Replaces existing factories
public class MailModule extends AbstractModule {
@Override
protected void configure() {
bind(Mail.class)
.to(MailImpl.class);
bind(MailConfig.class)
.to(MailConfigImpl.class);
}
}
public class MailImpl implements Mail {
private final MailConfig config;
@Inject
public MailImpl(MailConfig config) {
this.config = config;
}
public void send() { ... }
}
public class MailClient {
public static void main(String[] args) …Run Code Online (Sandbox Code Playgroud) 我有两个并排的元素.元素2小于元素1.两个元素都没有固定的高度.我需要垂直居中元素2.如何使用CSS实现这一目标?
编辑:
这是我到目前为止:
<div id="container" style="width: 100%;">
<div id="img1" style="float: left;">
<img src="image1.jpg".../>
</div>
<div id="img2" style="float: right;">
<img src="image2.jpg".../>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
img1的高度总是大于img2的高度.我希望img2垂直对齐.希望这能澄清我想要实现的目标.